GopenGL将纹理坐标与世界对齐,而不是面对

时间:2012-04-09 00:29:22

标签: opengl-es coordinates textures

我目前拥有的内容:根据矩形的宽度和高度以及纹理的比例因子生成纹理坐标。这很好:

vertices = new float[] {
                    0,          0,              0, this.height / (this.texture.height * this.texScaleHeight),
                    this.width, 0,              this.width / (this.texture.width * this.texScaleWidth), height / (this.texture.height * this.texScaleHeight),
                    this.width, this.height,    this.width / (this.texture.width * this.texScaleWidth), 0,
                    0,          this.height,    0, 0 };

我现在要做的是,一些具有不同位置的矩形(即彼此相邻)具有纹理的无缝刻度。我尝试了以下但没有取得好成绩。

vertices = new float[] {
                    0,          0,              -this.getPosition().x * this.texScaleWidth, this.height / (this.texture.height * this.texScaleHeight) -this.getPosition().y * this.texScaleHeight,
                    this.width, 0,              this.width / (this.texture.width * this.texScaleWidth) -this.getPosition().x * this.texScaleWidth, height / (this.texture.height * this.texScaleHeight)-this.getPosition().y * this.texScaleHeight,
                    this.width, this.height,    this.width / (this.texture.width * this.texScaleWidth) -this.getPosition().x * this.texScaleWidth, -this.getPosition().y * this.texScaleHeight,
                    0,          this.height,    -this.getPosition().x * this.texScaleWidth, -this.getPosition().y * this.texScaleHeight };

我如何实现纹理“与世界对齐”而不是它们所坐的矩形?

1 个答案:

答案 0 :(得分:0)

这种技术可能方式过于笼统,但在这里:你可以将纹理坐标投影到几何上。

整个工作流程与处理几何体本身相同,但在这里,所有世界点都分配了纹理坐标。通过另一个MVP矩阵(代表投影仪)推动几何体中的每个点,并将(x, y)结果作为此点的纹理坐标(假设正交投影);透视要求事后按w进行划分。

我希望你明白这个主意。搜索它,我找不到体面的描述或教程。 阴影映射使用相同的技术,但其目标是确定一个点是否被遮蔽;在这里,目标是找到普通投影仪的纹理坐标。