我希望能對以下幾點有所幫助。我正在嘗試在OpenGL ES 1.1中的另一個對象上爲iPhone遊戲渲染一個環形。戒指本質上是兩個圓圈之間的區別。OpenGL ES 1.1 2D紋理紋理iPhone
我有一個爲戒指本身準備的圖形,它在中心是透明的。
我曾希望創建一個圓圈,並將紋理應用到該圓圈。紋理是佔據整個紋理大小的環的圖片(即,環的外側接觸紋理的四個側面)。環的中心在使用的圖形中是透明的。
它需要透明的中心,讓下面的對象顯示。戒指呈現正確,但在中心是一個堅實的黑色質量,不透明。我很感激任何幫助來解決這個問題。
我用來渲染圓的代碼如下(根本沒有優化過:我將把適當的緩衝區中的座標移到後面的代碼中,但是我已經用這種方式寫了它來試着讓它工作...)
if (!m_circleEffects.empty())
{
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
int segments = 360;
for (int i = 0; i < m_circleEffects.size(); i++)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(m_circleEffects[i].position.x, m_circleEffects[i].position.y, 0);
glBindTexture(GL_TEXTURE_2D, m_Texture);
float radius = 1.764706;
GLfloat circlePoints[segments * 3];
GLfloat textureCoords[segments * 2];
int circCount = 3;
int texCount = 2;
for (GLfloat i = 0; i < 360.0f; i += (360.0f/segments))
{
GLfloat pos1 = cosf(i * M_PI/180);
GLfloat pos2 = sinf(i * M_PI/180);
circlePoints[circCount] = pos1 * radius;
circlePoints[circCount+1] = pos2 * radius;
circlePoints[circCount+2] = (float)z + 5.0f;
circCount += 3;
textureCoords[texCount] = pos1 * 0.5 + 0.5;
textureCoords[texCount+1] = pos2 * 0.5 + 0.5;
texCount += 2;
}
glVertexPointer(3, GL_FLOAT, 0, circlePoints);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_FAN, 0, segments);
}
m_circleEffects.clear();
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
我一直在嘗試創建一個環而不是一個圓,但我還沒有能夠得到這個權利呢。
我想最好的方法實際上不是創建一個圓,而是一個圓環,然後獲得等效的紋理座標。我仍在試驗戒指的寬度,但戒指的半徑可能是整個圓的1/4寬度。
仍然是OpenGL的noob,並試圖包圍我的頭。預先感謝任何可能有幫助的指針/片段。
謝謝。
感謝Christian。完美工作! – paynio