मैंने Google पर यह शोध करने की कोशिश की है लेकिन मुझे कोई सुसंगत सरल उत्तर नहीं दिखता है। क्या ऐसा इसलिए है क्योंकि यह आसान नहीं है, या क्योंकि मैं सही कीवर्ड का उपयोग नहीं कर रहा हूं?मैं ओपनजीएल में बनावट को पारदर्शी कैसे बना सकता हूं?
फिर भी, यह प्रगति मैंने अभी तक की है।
- 2 वर्ग बनाने के लिए 8 शिखर बनाए गए।
- 200 बिट अल्फा मान (इसलिए, लगभग 80% पारदर्शी) के साथ एक बनावट बनाया।
- प्रत्येक वर्ग में एक ही बनावट को असाइन किया गया, जो सही ढंग से दिखाता है।
- नोटिस किया गया कि जब मैं 255 अल्फा के साथ बनावट का उपयोग करता हूं, तो यह उज्जवल प्रतीत होता है।
init निम्नलिखित की तरह कुछ है:
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, textureIds);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
int i, j;
GLubyte pixel;
for (i = 0; i < TEXTURE_HEIGHT; i++)
{
for (j = 0; j < TEXTURE_WIDTH; j++)
{
pixel = ((((i & 0x8) == 0)^((j & 0x8) == 0)) * 255);
texture[i][j][0] = pixel;
texture[i][j][1] = pixel;
texture[i][j][2] = pixel;
texture[i][j][3] = 200;
}
}
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
TEXTURE_WIDTH, TEXTURE_HEIGHT,
0, GL_RGBA, GL_UNSIGNED_BYTE, texture);
यह कुछ हद तक पुस्तक में पृष्ठ 417 से कोड का टुकड़ा, ओपन प्रोग्रामिंग गाइड के समान है, और एक चेक पैटर्न बनाता है।
और फिर, प्रदर्शन समारोह में शामिल है ...
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
// Use model view so that rotation value is literal, not added.
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
// ... translation, etc ...
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, +1.0, 0.0); // top left
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); // bottom left
glTexCoord2f(1.0, 1.0); glVertex3f(+1.0, -1.0, 0.0); // bottom right
glTexCoord2f(1.0, 0.0); glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();
// not neccecary to repeat, just good practice
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, +1.0, -1.0); // top left
glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, -1.0, -1.0); // bottom left
glTexCoord2f(1.0, 1.0); glVertex3f(+1.5, -1.0, -1.0); // bottom right
glTexCoord2f(1.0, 0.0); glVertex3f(+1.5, +1.0, -1.0); // top right
glEnd();
glFlush();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
SwapBuffers();
तो, यह पृष्ठभूमि में एक 2 वर्ग renders; मैं पीछे बनावट के बजाय यह देख, लेकिन यह है कि वे पृष्ठभूमि के साथ मिश्रित किया जा रहा है कर रहे हैं (मैं इस मान क्योंकि वे 255 बिट 200 से थोड़ा अल्फा के साथ गहरा कर रहे हैं) लग रहा है कर सकते हैं ...
के रूप में आप देख सकते हैं, कोई पारदर्शिता नहीं ... मैं इसे कैसे ठीक कर सकता हूं?
में इस पर
अधिक आप TEXTURE_WIDTH – shoosh
आह धन्यवाद के बजाय कि पाश में दो बार TEXTURE_HEIGHT है, लेकिन है कि कोई फर्क नहीं होगा के रूप में वे दोनों 64 कर रहे हैं। –