本文整理汇总了C#中SharpGL.OpenGL.MultMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# OpenGL.MultMatrix方法的具体用法?C# OpenGL.MultMatrix怎么用?C# OpenGL.MultMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharpGL.OpenGL
的用法示例。
在下文中一共展示了OpenGL.MultMatrix方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateProjectionMatrix
/// <summary>
/// Creates the projection matrix for the given screen size.
/// </summary>
/// <param name="gl">The OpenGL instance.</param>
/// <param name="screenWidth">Width of the screen.</param>
/// <param name="screenHeight">Height of the screen.</param>
public void CreateProjectionMatrix(OpenGL gl, float screenWidth, float screenHeight)
{
// Create the projection matrix for our screen size.
const float S = 0.46f;
float H = S * screenHeight / screenWidth;
projectionMatrix = glm.pfrustum(-S, S, -H, H, 1, 100);
// When we do immediate mode drawing, OpenGL needs to know what our projection matrix
// is, so set it now.
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.MultMatrix(projectionMatrix.to_array());
gl.MatrixMode(OpenGL.GL_MODELVIEW);
}
示例2: RenderImmediateMode
/// <summary>
/// Renders the scene in immediate mode.
/// </summary>
/// <param name="gl">The OpenGL instance.</param>
public void RenderImmediateMode(OpenGL gl)
{
// Setup the modelview matrix.
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
gl.MultMatrix(modelviewMatrix.to_array());
// Go through each group.
foreach (var mesh in meshes)
{
var texture = meshTextures.ContainsKey(mesh) ? meshTextures[mesh] : null;
if(texture != null)
texture.Bind(gl);
uint mode = OpenGL.GL_TRIANGLES;
if (mesh.indicesPerFace == 4)
mode = OpenGL.GL_QUADS;
else if(mesh.indicesPerFace > 4)
mode = OpenGL.GL_POLYGON;
// Render the group faces.
gl.Begin(mode);
for (int i = 0; i < mesh.vertices.Length; i++ )
{
gl.Vertex(mesh.vertices[i].x, mesh.vertices[i].y, mesh.vertices[i].z);
if(mesh.normals != null)
gl.Normal(mesh.normals[i].x, mesh.normals[i].y, mesh.normals[i].z);
if(mesh.uvs != null)
gl.TexCoord(mesh.uvs[i].x, mesh.uvs[i].y);
}
gl.End();
if(texture != null)
texture.Unbind(gl);
}
}
示例3: RecursiveRender
private void RecursiveRender(Assimp.Scene scene, Node node, ref OpenGL gl)
{
Matrix4 m = FromMatrix(node.Transform);
m.Transpose();
gl.PushMatrix();
gl.MultMatrix(FloatFromMatrix(m));
if (node.HasMeshes)
{
foreach (int index in node.MeshIndices)
{
Mesh mesh = scene.Meshes[index];
ApplyMaterial(m_model.Materials[mesh.MaterialIndex], ref gl);
if (mesh.HasNormals)
{
gl.Enable(OpenGL.GL_LIGHTING);
}
else
{
gl.Disable(OpenGL.GL_LIGHTING);
}
bool hasColors = mesh.HasVertexColors(0);
if (hasColors)
{
gl.Enable(OpenGL.GL_COLOR_MATERIAL);
}
else
{
gl.Disable(OpenGL.GL_COLOR_MATERIAL);
}
bool hasTexCoords = mesh.HasTextureCoords(0);
foreach (Assimp.Face face in mesh.Faces)
{
BeginMode faceMode;
switch (face.IndexCount)
{
case 1:
faceMode = BeginMode.Points;
break;
case 2:
faceMode = BeginMode.Lines;
break;
case 3:
faceMode = BeginMode.Triangles;
break;
default:
faceMode = BeginMode.Polygon;
break;
}
gl.Begin(faceMode);
for (int i = 0; i < face.IndexCount; i++)
{
int indice = face.Indices[i];
if (hasColors)
{
Color4 vertColor = FromColor(mesh.VertexColorChannels[0][indice]);
if (mesh.HasNormals)
{
Vector3 normal = FromVector(mesh.Normals[indice]);
gl.Normal(normal.X, normal.Y, normal.Z);
}
if (hasTexCoords)
{
Vector3 uvw = FromVector(mesh.TextureCoordinateChannels[0][indice]);
gl.TexCoord(uvw.X, 1 - uvw.Y);
}
Vector3 pos = FromVector(mesh.Vertices[indice]);
gl.Vertex(pos.X, pos.Y, pos.Z);
}
gl.End();
}
}
}
for (int i = 0; i < node.ChildCount; i++)
{
RecursiveRender(m_model, node.Children[i], ref gl);
}
}
}