コード例 #1
0
        private void processObjects(int idActualPol, int isTextured, ref NsbmdModel.ShapeInfoStruct actualPolygon, ref NsbmdModel.MatTexPalStruct actualMaterials, int num_obj, int idActualMateria)
        {
            NsbmdModel.NodeInfoStruct actualNodeInfo = modelList[idModel].getMDL0at(0).nodeInfoList[num_obj];

            if (actualNodeInfo.restoreId != -1)
            {
                Gl.glLoadMatrixf(MatrixStack[actualNodeInfo.restoreId].Floats);
            }
            if (actualNodeInfo.stackId != -1)
            {
                Gl.glGetFloatv(Gl.GL_MODELVIEW_MATRIX, MatrixStack[actualNodeInfo.stackId].Floats);
                stackID = actualNodeInfo.stackId;
            }

            Gl.glLoadIdentity();

            actualPolygon = modelList[idModel].getMDL0at(0).shapeInfo.shapeList[idActualPol];
            var actualMaterial = modelList[idModel].getMaterials()[idActualMaterial];

            if (isTextured == 0)
            {
                Gl.glPolygonMode(0x408, 0x1b01);
            }
            else
            {
                Gl.glPolygonMode(0x408, 0x1b02);
            }

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, idActualMaterial + 1);
            Gl.glMatrixMode(Gl.GL_TEXTURE);
            Gl.glLoadIdentity();
            if ((actualMaterials.flipS == 1) && (actualMaterials.repeatS > 0))
            {
                Gl.glScalef(2f / ((float)actualMaterials.width), 1f / ((float)actualMaterials.heigth), 1f);
            }
            else if ((actualMaterials.flipT == 1) && (actualMaterials.repeatT > 0))
            {
                Gl.glScalef(1f / ((float)actualMaterials.width), 2f / ((float)actualMaterials.heigth), 1f);
            }
            else
            {
                Gl.glScalef(1f / ((float)actualMaterials.width), 1f / ((float)actualMaterials.heigth), 1f);
            }

            Gl.glColor3f(1f, 1f, 1f);
            stackID = actualPolygon.stackId;
            modelList[idModel].getMDL0at(0).shapeInfo.shapeList[idActualPol] = process3DCommand(actualPolygon.polygonData, actualPolygon);
        }
コード例 #2
0
 public NsbmdModel renderAllPolygon(int idActualPoly, int isTextured, int[] idMaterialArray)
 {
     if (modelList.Count == 0)
     {
         return(null);
     }
     for (int num_obj = 0; num_obj < modelList[idModel].getMDL0at(0).nodeInfoList.Count; num_obj++)
     {
         NsbmdModel.NodeInfoStruct actualNodeInfo = modelList[0].getMDL0at(0).nodeInfoList[num_obj];
         if (actualNodeInfo.restoreId != -1)
         {
             Gl.glLoadMatrixf(MatrixStack[0].Floats);
         }
         Gl.glGetFloatv(Gl.GL_MODELVIEW_MATRIX, MatrixStack[0].Floats);
         stackID = 0;
         Gl.glLoadIdentity();
         for (int polyCounter = 0; polyCounter <= idActualPoly; polyCounter++)
         {
             renderPolygon(isTextured, idMaterialArray, polyCounter);
         }
     }
     return(modelList[idModel].getMDL0at(0));
 }