gpt4 book ai didi

java - 视差 XY 和旋转 - 平铺计算

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:09 24 4
gpt4 key购买 nike

我有这个代码来绘制我的视差背景

pGLState.pushModelViewGLMatrix();
final float cameraWidth = pCamera.getWidth();
final float cameraHeight = pCamera.getHeight();
final float shapeWidthScaled = this.mShape.getWidthScaled();
final float shapeHeightScaled = this.mShape.getHeightScaled();

//reposition

float baseOffsetX = (pParallaxValueX * this.mParallaxFactorX);
if (this.mRepeatX) {
baseOffsetX = baseOffsetX % shapeWidthScaled;
while(baseOffsetX > 0) {
baseOffsetX -= shapeWidthScaled;
}
}

float baseOffsetY = (pParallaxValueY * this.mParallaxFactorY);
if (this.mRepeatY) {
baseOffsetY = baseOffsetY % shapeHeightScaled;
while(baseOffsetY > 0) {
baseOffsetY -= shapeHeightScaled;
}
}

//draw

pGLState.translateModelViewGLMatrixf(baseOffsetX, baseOffsetY, 0);
float currentMaxX = baseOffsetX;
float currentMaxY = baseOffsetY;
do {

//rows

this.mShape.onDraw(pGLState, pCamera);
if (this.mRepeatY) {
currentMaxY = baseOffsetY;

//columns

do {
pGLState.translateModelViewGLMatrixf(0, shapeHeightScaled, 0);
currentMaxY += shapeHeightScaled;
this.mShape.onDraw(pGLState, pCamera);
} while(currentMaxY < cameraHeight);

//end columns

pGLState.translateModelViewGLMatrixf(0, -currentMaxY + baseOffsetY, 0);
}

pGLState.translateModelViewGLMatrixf(shapeWidthScaled, 0, 0);
currentMaxX += shapeWidthScaled;
} while (this.mRepeatX && currentMaxX < cameraWidth);

//end rows

pGLState.popModelViewGLMatrix();

相机不旋转时一切正常。

当它旋转时,我认为 tile (this.mShape) 应该再绘制四次(顶部、底部、左侧和右侧),这样角落里的空白区域就看不到了。例如,当旋转为 45 度时,但我不知道该怎么做。

最佳答案

从解释看来,您有一组 2x2 的图 block ,并且您想要旋转它们。但是当你这样做的时候,角落里有空隙吗?所以不要这样做

    [][]
[][]

2x2 tile set 这样做

    [][][]
[][][]
[][][]

3x3 方 block 集并将其居中在中心瓷砖上,然后在其周围填充。

如果您有一个 4 block 拼贴图案且公共(public)角位于中心很重要,那么您将不得不这样做

    [][][][]
[][][][]
[][][][]
[][][][]

4x4 瓷砖集。基本上只是围绕你的 2x2 构建。现在,当您旋转背景时,角部将没有缝隙。

其余的只是数学。

在 opengl 中,您正在旋转世界,而不是对象。因此,可以这样想,您正在旋转 x、y、z 平面

        |
|
---------
|
|

也是

     \      /
\ /
\ /
><
/ \
/ \
/ \

所以现在几何体将旋转到它被绘制的位置加上旋转。因此,如果我有一个角位于 x、y、z (10,0,0) 的正方形,该点仍将位于 (10,0,0),但 X 轴将旋转 45',因此对象将在 XY 平面上以 45' 角与 (0,0,0) 的原点相距 10 个 X 单位距离。

所以这就是关于在偏移处重新绘制您的图 block 。

关于java - 视差 XY 和旋转 - 平铺计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com