有几种模式可供选择:
Modelview
Projection
Texture
Color
他们是什么意思?什么是最常用的?你知道哪些简单的初学者读物?
答案 0 :(得分:16)
OpenGL使用多个矩阵来转换几何和相关数据。那些矩阵是:
所有这些矩阵一直在使用。由于它们遵循所有相同的规则,OpenGL只有一组矩阵操作函数:glPushMatrix
,glPopMatrix
,glLoadIdentity
,glLoadMatrix
,glMultMatrix
,{{1 }},glTranslate
,glRotate
,glScale
,glOrtho
。
glFrustum
选择这些操作对哪个矩阵进行操作。假设您想编写一些C ++命名空间包装器,它可能如下所示:
glMatrixMode
稍后在C ++程序中,您可以编写
namespace OpenGL {
// A single template class for easy OpenGL matrix mode association
template<GLenum mat> class Matrix
{
public:
void LoadIdentity() const
{ glMatrixMode(mat); glLoadIdentity(); }
void Translate(GLfloat x, GLfloat y, GLfloat z) const
{ glMatrixMode(mat); glTranslatef(x,y,z); }
void Translate(GLdouble x, GLdouble y, GLdouble z) const
{ glMatrixMode(mat); glTranslated(x,y,z); }
void Rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) const
{ glMatrixMode(mat); glRotatef(angle, x, y, z); }
void Rotate(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) const
{ glMatrixMode(mat); glRotated(angle, x, y, z); }
// And all the other matrix manipulation functions
// using overloading to select proper OpenGL variant depending on
// function parameters, and all the other C++ whiz.
// ...
};
//
const Matrix<GL_MODELVIEW> Modelview;
const Matrix<GL_PROJECTION> Projection;
const Matrix<GL_TEXTURE> Texture;
const Matrix<GL_COLOR> Color;
}
不幸的是,C ++无法模板命名空间,或者在实例上应用void draw_something()
{
OpenGL::Projection::LoadIdentity();
OpenGL::Projection::Frustum(...);
OpenGL::Modelview::LoadIdentity();
OpenGL::Modelview::Translate(...);
// drawing commands
}
(或using
)(其他语言都有这个),否则我会编写类似(无效的C ++)
with
我认为最后一段剪切的(伪)代码清楚地表明:void draw_something_else()
{
using namespace OpenGL;
with(Projection) { // glMatrixMode(GL_PROJECTION);
LoadIdentity(); // glLoadIdentity();
Frustum(...); // glFrustum(...);
}
with(Modelview) { // glMatrixMode(GL_MODELVIEW);
LoadIdentity(); // glLoadIdentity();
Translate(...); // glTranslatef(...);
}
}
是一种glMatrixMode
OpenGL语句。
答案 1 :(得分:3)
作为旁注,在OpenGL 3.3及更高版本中不推荐使用矩阵模式(以及矩阵堆栈功能的其余部分)。
答案 2 :(得分:2)
它们的所有由OpenGL内部使用,但是否需要更改它们取决于您的应用程序。
您始终需要设置“投影”矩阵以确定您的视野以及您正在查看的空间范围。通常,您将设置Modelview矩阵以选择“相机”方向,并在场景中定位对象。
纹理和颜色矩阵不太常用。在我当前的项目中,我使用Texture矩阵在我的位图中翻转Y.我个人从未使用过Color矩阵。
答案 3 :(得分:0)
您可以在http://www.opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml
找到答案modelview用于建模。投影用于投影像3d的东西。纹理的纹理。着色的颜色。但还有更多。请阅读我给你的链接。欢呼声。