Rg[[̗p |
hLg̖ڎ |
Rg[[pbhɂė̂nʂ̏œ Walk.java łB Rg[[̕L[ŗ̂܂B
ȉǂẴ\[XR[hĂ܂B
ŏɋNƂARg[[͎g悤ɂȂĂ܂B Rg[[Ăƃj[́uRg[[vu|[g0vIԂƁA ڑĂRg[[o܂(́uKEYBOARD CONTROLLERv̓L[{[hɂ G~[Vł)B̒̈I邱ƂŁAIꂽRg[[ LɂȂAg悤ɂȂ܂B
Rg[[̐ݒ̓vOƂɕۑ̂ŁAxĂĂ NƂɂ͂ɃRg[[g悤ɂȂĂ܂B ARg[[ȂςꍇȂǂŁuڑȂvɂȂ̂ŁA ̏ꍇ́A܂j[ݒ肵ȂƂɂȂ܂B
ȉARg[[g
ApplicationNX̎NX̃R[hłBpublic void oniMain(OniRuntime runtime,String argv[]) { runtime.useController(1, ControllerDescriptor.JOYPAD_8BUTTONS); runtime.createWindow("", width, height); runtime.createGraphicsWithDefaultPixelFormat(); runtime.addControllerListener(0, new PadController()); runtime.addKeyListener(new KeyController()); runtime.run(); }
oniMain\bh̒ŁAOniRuntimeIuWFNguseController\bhĂяo܂B̃\bh̍ŏ̈ vOŎgpRg[[̐łBOni ł͕̃Rg[[vO Ƃo܂B 2߂̈̓Rg[[̃^CvłBoni.runtime.ctrl.ControllerDescriptor̒ `Ă̂IԂƂł܂B ł́u18{^pbhgvƂɂȂ܂BāA
OniRuntimeIuWFNgaddControllerListenerŃCxgXi[oni.runtime.event.ControllerListener̎NXPadControllero^Ă܂B ŏ̈̓Rg[[IDŁA0Ԗڂ̃Rg[[ɑăXi[ݒ肵Ă ƂɂȂ܂BIuWFNgړ̏@
Rg[[̓L[{[gƈႢAʏ̓s[g܂B ԂύXꂽƂACxg܂B ̂߈ړꍇɂ́ARg[[̏ԂێāAI ɂ̒lpf[^XVĂԂƂɂȂ܂B ̏
ApplicationNX̎NXupdate\bh ĂяoƂɂĂ܂BȉA̔̕łB
public class Walk implements Application { .... private float speedX = 0f; private float speedY = 0f; .... public void update(GLGraphics g) { next(); draw(g); } .... private void next() { cube.move(speedX, speedY, 0); camera.move(speedX, speedY, 0); } .... class PadController implements ControllerListener { public void axisInclined(ControllerEvent ev) { float[] axisPoint = ev.getAxisPoint(); speedX = -axisPoint[0]; speedY = axisPoint[1]; } public void hatswitchChanged(ControllerEvent ev) { } public void buttonPressed(ControllerEvent ev) { } public void buttonReleased(ControllerEvent ev) { } } }
oni.runtime.event.ControllerListenerł4̃\bhKv܂B ł͕L[gȂ̂ŁAaxisInclined\bhɏ LqĂ܂BXVꂽ͈œnoni.runtime.event.ControllerEventɓĂ܂BL[̒l
getAxisPoint\bho܂B ߂lfloat̔złB0ԖڂxA1ԖڂyɂȂĂ܂B Rg[[ɂĂẑ܂B̏ꍇɂ2Ԗڂz̒lłB l-1.0`1.0܂łɂȂ܂Bʏ͏ƍ-1.0AEƉ1.0ɂȂ܂B
̃vOł͒nʂƂăeNX`\tĂ܂B PNGt@C[hAeNX`ƂărfIJ[hɓo^ gĂ܂B
܂AeNX`ɎgC[W̏c̃sNZ256x512Ȃ2nɂȂĂKv܂B ȉAnʃeNX`NX
Land̃R[h:class Land extends Material { public Land(String fileName, double aZ) { image = GLImageUtil.createBufferedGLImage(fileName); z = aZ; } public void init(GLGraphics g) { int[] ids = new int[1]; g.glGenTextures(1, ids); id = ids[0]; g.glBindTexture(GLConstants.GL_TEXTURE_2D, id); image.texImage(g); } public void draw(GLGraphics g) { int width = image.getWidth(); int height = image.getHeight(); int mul = 4; int[] enables = { GLConstants.GL_DEPTH_TEST, GLConstants.GL_TEXTURE_2D, }; for (int i = 0; i < enables.length; i++) { g.glEnable(enables[i]); } g.glBindTexture(GLConstants.GL_TEXTURE_2D, id); g.glTexParameterf(GLConstants.GL_TEXTURE_2D, GLConstants.GL_TEXTURE_MIN_FILTER, GLConstants.GL_NEAREST); g.glColor4d(1, 1, 1, 1); g.glScaled(mul, mul, 1); g.glTranslated(-width/2, -height/2, z); g.glBegin(GLConstants.GL_QUADS); g.glTexCoord2f(0, 0); g.glVertex3d(0, 0, 0); g.glTexCoord2f(mul, 0); g.glVertex3d(width, 0, 0); g.glTexCoord2f(mul, mul); g.glVertex3d(width, height, 0); g.glTexCoord2f(0, mul); g.glVertex3d(0, height, 0); g.glEnd(); for (int i = enables.length - 1; i >= 0; i--) { g.glDisable(enables[i]); } } private BufferedGLImage image; private int id = -1; private double z; }RXgN^łPNGt@C
onix.gfx.image.BufferedGLImageƂ [hĂ܂BApplicationNX̃RXgN^ ŌĂяoĂ܂B
init\bhApplicationNXinitGraphics\bh̒ŌĂяoĂ܂BŃeNX`̓o^sĂ܂B
draw\bhApplicationNXupdate\bh ŌĂяoĂ܂Bł͌C[WƓ傫mulwmul̃^CxyʂɕsɂȂ悤ɓ\tĂ܂Bn߂
glBindTextureœo^ĂeNX`ĂяoĂ܂BglTexParameterGL_TEXTURE_MIN_FILTERGL_NEARESTݒ肵Ă܂BeNX`ʂɒƂA|S̊e_
glVertexőł OɁAglTexCoordŃeNX`̑Ή_ݒ肵܂B eNX`̍WngA1Ԃ̕Aꂼ1.0A1.0ɂȂ܂B ܂A4_ꂼ2.0ƁA̕ʂɂ2x2̃eNX`\邱Ƃ Ȃ܂B̃vOłmul=4Ȃ̂4x4ׂꂽeNX` ʂɓ\t܂Bł
GL_LIGHTINGLɂĂȂ̂glColorŐFĂ܂BGL_LIGHTINGLɂĂꍇ́AO͂̂悤glMaterialœK ގݒ肷Kv܂B
|
Copyright © 2001-2002 CyberStep, Inc. All Rights Reserved. |
Oni \tgEFA |