我试图使用评估者创建一个平面:
void Plane::draw(float texS, float texT)
{
float div = v.at(0);
GLfloat ctrlpoints[4][3] = {
{-0.5, 0.0, 0.5}, {-0.5, 0.0 ,-0.5},
{0.5, 0.0, 0.5}, {0.5, 0.0, -0.5}};
GLfloat texturepoints[4][2] = {
{0.0, 0.0}, {0.0, 1.0/texT},
{1.0/texS, 0.0}, {1.0/texS, 1.0/texT}};
glMap2f(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 2, 0.0, 1.0, 2 * 3, 2, &ctrlpoints[0][0]);
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, 0.0, 1.0, 2 * 2, 2, &texturepoints[0][0]);
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_MAP2_TEXTURE_COORD_2);
glEnable(GL_AUTO_NORMAL);
glMapGrid2f(div, 0.0, 1.0, div, 0.0, 1.0);
glEvalMesh2(GL_FILL,0, div, 0, div);
}
它正确显示平面,例如,它给我一个50 * 50的网格,我应用的纹理也正确显示。但是,如果我尝试在其上涂上金色外观,它只会给我一种暗棕色。
我知道我可以通过创建带有四边形或三角形条带的矩形来获得我想要的东西,但这里的重点是使用评估器。
我发现一个答案说,评估者通过启用GL_AUTO_NORMAL自动计算法线,这是唯一必要的指令。但即便如此,问题的作者也无法做他想做的事。
我在初始化中启用了GL_NORMALIZE。