हम एक कोर्स के रूप में एक साधारण 3 डी गेम लिख रहे हैं जिसमें हम विश्वविद्यालय में जाते हैं। (काम के जोड़ों के लिए है) हम JOGL उपयोग करने के लिए है, इसलिए मैं इस API के साथ काम करना होगा (जैसे समाधान: ऐसे java3D के रूप में उच्च स्तर एपीआई के लिए स्विच मेरे लिए अच्छा नहीं होगा ...) वैसे भी, जिस गेम को हमने लागू करने का निर्णय लिया वह एक 3 डी शूटर है। (अब तक का कोड, जिसे हमने उसी पाठ्यक्रम के लिए बनाए गए पिछले असाइनमेंट से फोर्क किया है, यहां पाया जा सकता है: http://code.google.com/p/mirzhcode/source/browse/?repo=cgex4) और अब मैं "विशेष प्रभाव" से निपटने की कोशिश कर रहा हूं। अधिक सटीक, & स्प्राइट (शूटिंग, विस्फोट, आदि के लिए '...) कणों मैं स्प्राइट उत्सर्जक है, जो मैं लागू करना चाहते हैं के बारे में एक व्याख्या भर में आया था: http://bit.ly/KrrPM4जावा + जॉगएल, बनावट बनाते समय सादे काले रंग के बजाय दृश्य में वस्तुओं को दिखाने के लिए ट्रांसपरेंसी कैसे सेट करें?
मैं के साथ बाहर शुरू कर दिया क्या आसान लग रहा था अंश। शॉकवेव रिंग, जो एक तेजी से बढ़ते स्प्राइट से बना है। जब मैं अपनी छवि को खींचने की कोशिश कर रहा हूं, तो मुझे पारदर्शिता की बजाय काले पृष्ठभूमि मिलती है। संरचना छवि एक पारदर्शी PNG फ़ाइल (अल्फ़ा चैनल तो वहाँ है) है और क्या मैं इसे से मिलता है:
कोड मैं इस उत्पन्न करने के लिए प्रयोग किया है:
init()
विधि:
//loading textures
try {
shockwave = TextureIO.newTexture(new File("textures/shockwave_128X128.png"),false);
} catch (GLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
gl.glShadeModel(GL.GL_SMOOTH);
gl.glClearColor(0f, 0f, 0f, 1f);
gl.glClearDepth(1.0);
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE);
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
gl.glHint(GL.GL_POINT_SMOOTH_HINT, GL.GL_NICEST);
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glEnable(GL.GL_DEPTH_TEST);
//UNCOMMENT THE FOLLOWING LINE OF CODE
//FOR REALISTIC COLORS. NOTE THAT ICC
//BUTTON WON'T CHANGE THE COLORS ANYMORE.
//gl.glEnable(GL.GL_LIGHTING);
//two (soft) lights (red and blue) setup.
//each in an opposite corner of the room.
float color0[] = {1f, 0f, 0f, 0.5f};
float ambient0[] = {1.0f, 1.0f, 1.0f, 0.5f};
float position0[] = {(float) (0.95*expansionFactor), (float) (0.95*expansionFactor), (float) (0.95*expansionFactor)};
float color1[] = {0f, 0f, 1f, 0.5f};
float ambient1[] = {1.0f, 1.0f, 1.0f, 0.5f};
float position1[] = {(float) (0.95*expansionFactor), (float) (0.95*expansionFactor), (float) (0.95*expansionFactor)};
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, ambient0,1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE,color0 , 1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, color0 , 1);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position0, 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, ambient1,1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE,color1 , 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, color1 , 1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, position1, 1);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_LIGHT1);
start();
gl.glEnable(GL.GL_BLEND);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
shockwave.bind();
gl.glColor4f(1f,1f,1f,1f);
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3d(0.0-10, 0.2, 0.0-10);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3d(0.0+10, 0.2, 0.0-10);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3d(0.0+10, 0.2, 0.0+10);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3d(0.0-10, 0.2, 0.0+10);
gl.glEnd();
सु करने के लिए:
और भी display()
विधि में मैं इसे समझता हूं, मेरा सवाल यह है कि मैं अपने अल्फा चैनल, का उपयोग करने के लिए बनावट कैसे प्राप्त करूं और यदि यह इतना आसान नहीं है, तो क्या ऐसी लाइब्रेरी है जिसे आप जानते हैं जिसका मैं उपयोग कर सकता हूं?