通过更改三角形大小来更改Open-GL纹理坐标

汤玛士

我在使用Open-GL进行纹理映射时遇到问题。

例子
(1)是质地。我想使用这个三角形之外的一个三角形
(2),仅用于描述将纹理分割成三角形
(3)将纹理映射到三角形16x16(高度x宽度)
(4)变形三角形的错误映射(如果三角形尺寸不是16x16)

对于(4),仅设置变量H1,H2,H3,H4(请参见第二个代码框)

设置

//- setup cam / OpenGL
int width = 1024;
int height = 800;

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.f, width, 0.f, height, 1.f, -1.f);

glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

...

//- texture position in texture [Value range: 0..1]
float textX1 = 0.f;
float textY1 = 0.f;

//- size of texture triangle
const float textSizeWidth = 16.0f / getTextureWidth(); //- getTextureWidth()=2^N !
const float textSizeHeight = 16.0f / getTextureHeight();//- getTextureHeight()=2^M !
const float textSizeWidthHalf = textSizeWidth * 0.5f;

//- output screen coordinates [Value range: 0.. N !!]
int outX = 0;
int outY = 0;


//- the heigh of one "line"
static const int YSTEP = 9;

三角形

//-> cal: outX, outY, textX1, textY1, textX2, textY2 

//-  deformation values
unsigned int H1 = l->AraeHeight1;
unsigned int H2 = l->AraeHeight2;
unsigned int H3 = l->AraeHeight3;
unsigned int H4 = l->AraeHeight4;

//- disable the Height/deformation
if (!m_useHeight) H1 = H2 = H3 = H4 = 0;


//--      1 --- 4  ^
//--     / \ B /   |
//--    / A \ /    |YSTEP
//--   2 --- 3     v

////// A /////
//-- ->1
glTexCoord2f(textX1 + textSizeWidthHalf, textY1 + textSizeHeight);
glVertex3i(outX + 8, outY + YSTEP + H1, 0);

//-- ->2
glTexCoord2f(textX1, textY1);
glVertex3i(outX, outY + H2, 0);


//-- ->3
glTexCoord2f(textX1 + textSizeWidth, textY1);
glVertex3i(outX + 16, outY + H3, 0);


////// B /////
//-- ->1
glTexCoord2f(textX2, textY2 + textSizeHeight);
glVertex3i(outX + 8, outY + YSTEP + H1, 0);

//-- ->3
glTexCoord2f(textX2 + textSizeWidthHalf, textY2);
glVertex3i(outX + 16, outY + H3, 0);

//-- ->4
glTexCoord2f(textX2 + textSizeWidth, textY2 + textSizeHeight);
glVertex3i(outX + 8 + 16, outY + YSTEP + H4, 0);

如果H1 = H2 = H3 = H4 = 0; 然后一切看起来都很好(图片(3))。如果不是这样,我会遇到渲染问题(图像(4)),例如“四舍五入”问题,但我不知道在哪里/为什么。或问题在于,纹理向右移动了一个像素,但是为什么呢?还是我需要设置另一个Open-Gl参数。谢谢你的提示。

奥杜

您无法避免,这是一个栅格化规则,后来是一个过滤规则(从片段坐标对UV进行取整),在这种情况下,人们通常所做的是仅对蓝色像素在纹理上应用膨胀,这意味着复制每一个足够接近彩色区域的蓝色像素的最近彩色像素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

纹理三角形

来自分类Dev

如何更改三角形两侧的图像(任何纹理)?

来自分类Dev

重心坐标的三角形纹理映射

来自分类Dev

寻找三角形的第三坐标

来自分类Dev

纹理映射到三角形网格

来自分类Dev

如何更新三角形的坐标?

来自分类Dev

如何找到屋顶三角形的坐标?

来自分类Dev

Open GL无法绘制一些三角形

来自分类Dev

由2个三角形组成的四边形的正确纹理坐标是什么

来自分类Dev

使用三角形的坐标获取三角形的共享边

来自分类Dev

通过ggplot2将纹理类别添加到土壤分类三角形

来自分类Dev

Open GL DrawArrays仅绘制一个三角形/直线/点(OpenTK / C#)

来自分类Dev

用三个坐标填充三角形内的颜色

来自分类Dev

如何使用三角形顶点坐标(每个三角形有 9 个数字)在 matplotlib 中绘制 3d 三角形?

来自分类Dev

将坐标从一个三角形转移到另一个三角形

来自分类Dev

在三角形网格上绘制纹理

来自分类Dev

隐藏三角形边缘以获得带纹理的网格

来自分类Dev

在三角形网格上绘制纹理

来自分类Dev

C ++ OpenGL纹理多维数据集缺少三角形

来自分类Dev

使用3组坐标的三角形面积

来自分类Dev

查找圆内的坐标以形成三角形

来自分类Dev

在三角形顶点的精确坐标上绘制线的行为是什么

来自分类Dev

如何计算等边三角形的坐标?

来自分类Dev

三角形和标准化坐标的边界矩形

来自分类Dev

OpenGL 4.5直接状态访问呈现三角形-GL_INVALID_VALUE

来自分类Dev

给定三个点的坐标,如何确定所定义的三角形是等边,等腰还是斜角?

来自分类Dev

如何用中心坐标和一个点的坐标创建一个三角形?

来自分类Dev

如何更改三角形的大小并更改其位置?

来自分类Dev

OpenGL:即时更改纹理坐标

Related 相关文章

  1. 1

    纹理三角形

  2. 2

    如何更改三角形两侧的图像(任何纹理)?

  3. 3

    重心坐标的三角形纹理映射

  4. 4

    寻找三角形的第三坐标

  5. 5

    纹理映射到三角形网格

  6. 6

    如何更新三角形的坐标?

  7. 7

    如何找到屋顶三角形的坐标?

  8. 8

    Open GL无法绘制一些三角形

  9. 9

    由2个三角形组成的四边形的正确纹理坐标是什么

  10. 10

    使用三角形的坐标获取三角形的共享边

  11. 11

    通过ggplot2将纹理类别添加到土壤分类三角形

  12. 12

    Open GL DrawArrays仅绘制一个三角形/直线/点(OpenTK / C#)

  13. 13

    用三个坐标填充三角形内的颜色

  14. 14

    如何使用三角形顶点坐标(每个三角形有 9 个数字)在 matplotlib 中绘制 3d 三角形?

  15. 15

    将坐标从一个三角形转移到另一个三角形

  16. 16

    在三角形网格上绘制纹理

  17. 17

    隐藏三角形边缘以获得带纹理的网格

  18. 18

    在三角形网格上绘制纹理

  19. 19

    C ++ OpenGL纹理多维数据集缺少三角形

  20. 20

    使用3组坐标的三角形面积

  21. 21

    查找圆内的坐标以形成三角形

  22. 22

    在三角形顶点的精确坐标上绘制线的行为是什么

  23. 23

    如何计算等边三角形的坐标?

  24. 24

    三角形和标准化坐标的边界矩形

  25. 25

    OpenGL 4.5直接状态访问呈现三角形-GL_INVALID_VALUE

  26. 26

    给定三个点的坐标,如何确定所定义的三角形是等边,等腰还是斜角?

  27. 27

    如何用中心坐标和一个点的坐标创建一个三角形?

  28. 28

    如何更改三角形的大小并更改其位置?

  29. 29

    OpenGL:即时更改纹理坐标

热门标签

归档