Beispiel #1
0
 public void SetupTextures(SSTextureMaterial texInfo)
 {
     if (texInfo == null)
     {
         SetupTextures();
     }
     else
     {
         SetupTextures(texInfo.diffuseTex, texInfo.specularTex, texInfo.ambientTex, texInfo.bumpMapTex);
     }
 }
Beispiel #2
0
        private SSMeshOBJSubsetData _loadMaterialSubset(string baseDirectory, WavefrontObjLoader wff,
                                                        WavefrontObjLoader.MaterialInfoWithFaces objMatSubset)
        {
            // generate renderable geometry data...
            SSVertex_PosNormTex[] vertices;
            UInt16[] triIndices, wireframeIndices;
            VertexSoup_VertexFormatBinder.generateDrawIndexBuffer(
                wff, objMatSubset, out triIndices, out vertices);
            wireframeIndices = OpenTKHelper.generateLineIndicies(triIndices);
            SSMeshOBJSubsetData subsetData = new SSMeshOBJSubsetData(
                vertices, triIndices, wireframeIndices);

            // setup the material...
            // load and link every texture present
            subsetData.textureMaterial = SSTextureMaterial.FromBlenderMtl(baseDirectory, objMatSubset.mtl);
            subsetData.colorMaterial   = SSColorMaterial.fromMtl(objMatSubset.mtl);
            return(subsetData);
        }
Beispiel #3
0
        public STrailsRenderer(PositionFunc positonFunc, FwdFunc fwdDirFunc, UpFunc upFunc,
                               STrailsParameters trailsParams = null)
            : base(new STrailsData(positonFunc, fwdDirFunc, upFunc,
                                   trailsParams ?? new STrailsParameters()),
                   SSTexturedCube.Instance, _defaultUsageHint)
        {
            trailsParams = trailsData.trailsParams;
            var tex = SSAssetManager.GetInstance <SSTextureWithAlpha>(trailsParams.textureFilename);

            renderState.castsShadow     = false;
            renderState.receivesShadows = false;
            renderState.doBillboarding  = false;
            renderState.alphaBlendingOn = true;
            //renderState.alphaBlendingOn = false;
            renderState.depthTest  = true;
            renderState.depthWrite = false;
            renderState.lighted    = false;

            renderState.blendEquationModeRGB = BlendEquationMode.FuncAdd;
            renderState.blendFactorSrcRGB    = BlendingFactorSrc.SrcAlpha;
            //renderState.blendFactorDestRGB = BlendingFactorDest.DstAlpha;
            renderState.blendFactorDestRGB = BlendingFactorDest.OneMinusSrc1Alpha;

            renderState.blendEquationModeAlpha = BlendEquationMode.FuncAdd;
            renderState.blendFactorSrcAlpha    = BlendingFactorSrc.One;
            renderState.blendFactorDestAlpha   = BlendingFactorDest.One;
            //renderState.blendFactorSrcAlpha = BlendingFactorSrc.SrcAlpha;
            renderState.blendFactorDestAlpha = BlendingFactorDest.OneMinusSrcAlpha;

            simulateOnUpdate = false;
            simulateOnRender = true;

            renderState.frustumCulling = true;

            colorMaterial   = SSColorMaterial.pureAmbient;
            textureMaterial = new SSTextureMaterial(diffuse: tex);
            Name            = "simple trails renderer";

            //this.MainColor = Color4Helper.RandomDebugColor();
            this.renderMode = RenderMode.GpuInstancing;
        }
            public RenderSubMesh(SSSkeletalMesh skeletalMesh, SSSkeletalHierarchyRuntime hierarchy = null)
                : base(null, skeletalMesh.triangleIndices)
            {
                m_runtimeMesh = new SSSkeletalMeshRuntime(skeletalMesh, hierarchy);

                m_vertices = new SSVertex_PosNormTex[m_runtimeMesh.numVertices];
                for (int v = 0; v < m_runtimeMesh.numVertices; ++v)
                {
                    m_vertices [v].TexCoord = m_runtimeMesh.textureCoords(v);
                    m_vertices [v].Normal   = m_runtimeMesh.bindPoseNormal(v);
                }
                ComputeVertices();

                string matString = skeletalMesh.materialShaderString;

                if (matString != null && matString.Length > 0)
                {
                    base.textureMaterial
                        = SSTextureMaterial.FromMaterialString(skeletalMesh.assetContext, matString);
                }
            }
Beispiel #5
0
        public static SSTextureMaterial FromMaterialString(SSAssetManager.Context ctx, string materialString)
        {
            string existingFilename = null;

            SSAssetManager.Context existingCtx = null;

            if (ctx != null && SSAssetManager.ResourceExists(ctx, materialString))
            {
                existingCtx      = ctx;
                existingFilename = materialString;
            }
            else if (SSAssetManager.ResourceExists(SSAssetManager.Context.Root, materialString))
            {
                existingCtx      = SSAssetManager.Context.Root;
                existingFilename = materialString;
            }
            else
            {
                SSAssetManager.Context[] ctxs = { ctx, SSAssetManager.Context.Root };
                var extensions = new List <string> (SSTexture.commonImageExtensions);
                extensions.Insert(0, ".mtl");                  // check mtl first

                foreach (var context in ctxs)
                {
                    // for each context (current vs root directory)...
                    foreach (string extension in extensions)
                    {
                        // for each extension of interest...
                        string filename = materialString + extension;
                        if (SSAssetManager.ResourceExists(context, filename))
                        {
                            existingCtx      = context;
                            existingFilename = filename;
                            break;
                        }
                    }
                }
            }

            if (existingFilename != null)
            {
                // try loading a material
                try {
                    SSWavefrontMTLInfo[] mtls = SSWavefrontMTLInfo.ReadMTLs(existingCtx, existingFilename);
                    if (mtls.Length < 0)
                    {
                        throw new Exception("No MTLs available in a file");
                    }
                    return(SSTextureMaterial.FromBlenderMtl(existingCtx, mtls[0]));
                } catch {
                    // try loading an image
                    try {
                        SSTexture diffTex = SSAssetManager.GetInstance <SSTextureWithAlpha> (existingCtx, existingFilename);
                        return(new SSTextureMaterial(diffTex));
                    } catch {
                    }
                }
            }

            string errMsg = "could not load texture material: " + materialString;

            System.Console.WriteLine(errMsg);
            throw new Exception(errMsg);
        }
Beispiel #6
0
        public static SSTextureMaterial FromMaterialString(string basePath, string materialString)
        {
            string existingPath = null;

            string combined = Path.Combine(basePath, materialString);

            if (SSAssetManager.ResourceExists(combined))
            {
                existingPath = combined;
            }
            else if (SSAssetManager.ResourceExists(materialString))
            {
                existingPath = materialString;
            }
            else
            {
                string[] basePaths  = { "", basePath }; // search in root as well as supplied base path
                var      extensions = new List <string> (SSTexture.commonImageExtensions);
                extensions.Insert(0, ".mtl");           // check mtl first

                foreach (var bp in basePaths)
                {
                    // for each context (current vs root directory)...
                    foreach (string extension in extensions)
                    {
                        // for each extension of interest...
                        string fullPath = Path.Combine(bp, materialString + extension);
                        if (SSAssetManager.ResourceExists(fullPath))
                        {
                            existingPath = fullPath;
                            break;
                        }
                    }
                }
            }

            if (existingPath != null)
            {
                // try loading a material
                try {
                    SSWavefrontMTLInfo[] mtls = SSWavefrontMTLInfo.ReadMTLs(existingPath);
                    if (mtls.Length <= 0)
                    {
                        throw new Exception("No MTLs available in a file");
                    }
                    string baseDir = Path.GetDirectoryName(existingPath);
                    return(SSTextureMaterial.FromBlenderMtl(baseDir, mtls[0]));
                } catch {
                    // try loading an image
                    try {
                        SSTexture diffTex = SSAssetManager.GetInstance <SSTextureWithAlpha> (existingPath);
                        return(new SSTextureMaterial(diffTex));
                    } catch {
                    }
                }
            }

            string errMsg = "could not load texture material: " + materialString;

            System.Console.WriteLine(errMsg);
            throw new Exception(errMsg);
        }
 public void SetupTextures(SSTextureMaterial texInfo)
 {
     if (texInfo == null) {
         SetupTextures();
     } else {
         SetupTextures(texInfo.diffuseTex, texInfo.specularTex, texInfo.ambientTex, texInfo.bumpMapTex);
     }
 }