渲染三角形:
private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
{
OpenGL gL = GLControl.OpenGL;
gL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
gL.LoadIdentity();
maxX = Math.Max(AX, Math.Max(BX, CX));
maxY = Math.Max(AY, Math.Max(BY, CY));
minX = Math.Min(AX, Math.Min(BX, CX));
minY = Math.Min(AX, Math.Min(BX, CX));
maxZ = Math.Max(AZ, Math.Max(BZ, CZ));
minZ = Math.Min(AZ, Math.Min(BZ, CZ));
double figureWidht = maxX - minX;
double figureHeight = maxY - minY;
double figureSquare = figureWidht * figureHeight;
double viewPortSquare = GLControl.Width * GLControl.Height;
gL.Translate(-figureWidht / 2, -figureHeight / 2, -6);
gL.Begin(OpenGL.GL_LINES);
gL.Color(1.0F, 1.0F, 1.0F);
gL.Vertex((float)AX, (float)AY, (float)AZ);
gL.Vertex((float)BX, (float)BY, (float)BZ);
gL.Vertex((float)BX, (float)BY, (float)BZ);
gL.Vertex((float)CX, (float)CY, (float)CZ);
gL.Vertex((float)CX, (float)CY, (float)CZ);
gL.Vertex((float)AX, (float)AY, (float)AZ);
gL.End();
}
如何使图形始终适合OpenGLControl的视口?也就是说,如果图形大于opengl窗口,则将其调整到此窗口,以使所有轴都具有大致相同的间距,如果较小,则相应地增大。
答案 0 :(得分:0)
在OpengL 2.1中,您可以使用 glViewport(...)定义视口。 下一步,您定义一个透视图。在OpengL 2.1下,您可以使用 glFrustum(...)或 glOrtho(...)。 在这种情况下,您还应该查看 glloadidentity(), glMatrixMode(), glPushMatrix()和 glPopMatrix()< / strong>
答案 1 :(得分:0)
精神失常
我将创建一个边界框(计算顶点的minX,maxX,minY,maxY,minZ,maxZ)
然后检查每个轴Max(maxX-minX, maxY-minY, maxZ- minZ)
的最大增量
使用此最大增量在所有轴上以相同的增量按比例缩小对象(创建比例矩阵)scale(1/maxDelta, 1/maxDelta, 1/maxDelta)
现在,对象位于1、1、1范围内。现在您可以将其缩放到当前视口大小。