1

我有一个纹理 4 角多边形,我目前正在使用两个三角形和 GL_TRIANGLE_STRIP 绘制它。右侧需要更高,这会使事情变得混乱。三角形在中间相交的地方有一个明显的区别,我该如何清除这样的东西?

我想我需要某种仿射变换,或者细分成更多的三角形,但我不确定。

截图:http: //i.imgur.com/alYdG.png

示例代码:

float x = rect.origin.x;
float y = rect.origin.y;
float w = x + rect.size.width;
float h = y + rect.size.height;
V2fT2f quad[4] = {
    //x  y
    { x, y, 0, 1 },//bottom left
    { w, y-0.2, 1, 1 },//bottom right
    { x, h, 0, 0 },//top left
    { w, h+0.2, 1, 0 },//top right
};
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glBindTexture(GL_TEXTURE_2D,texID);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);glErrorCheck();
glVertexPointer  (2, GL_FLOAT, sizeof(V2fT2f), &quad[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(V2fT2f), &quad[0].s);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
4

1 回答 1

0

无论如何,要通过转换获得这种效果 - 您将需要设置透视投影。

完成后,这是您的顶点(这些顶点形成一个宽度和高度的矩形)

  1. X: centerX - halfWidth, Y: y - HalfHeight, Tu: 0, Tv: 0
  2. X:centerX - halfWidth,Y:y + HalfHeight,Tu:0,Tv:1
  3. X: centerX + halfWidth, Y: y + HalfHeight, Tu: 1, Tv: 1
  4. X: centerX + halfWidth, Y: y - HalfHeight, Tu: 1, Tv: 0

将其包含在 glRotatef(angle, 0, 1, 0) 中 - 围绕 Y 轴旋转角度

这应该给你你所需要的。

于 2012-05-21T18:37:07.630 回答