Lights and Shadows
Shadow Types that Ogre Supports
Ogre ในเวอชั่นน์ขณะนี้ สนับสนุนชนิดของเงาอยู่ 3 ชนิด:
Modulative Texture Shadows (SHADOWTYPE_TEXTURE_MODULATIVE) เป็นชนิดที่ น่าสนใจน้อยที่สุดใน 3 ชนิด โดยเงาชนิดนี้จะเป็นการสร้าง เงาขาวและดำให้ปรากฏบนพื้นผิว ที่ต้องการให้ปรากฏในฉาก
Modulative Stencil Shadows (SHADOWTYPE_STENCIL_MODULATIVE) เทคนิคนี้เป็นการเรนเดอร์เงาทั้งหมดผสมรวมกัน หลังจากที่วัตถุที่ไม่โปร่งใสในฉากได้ถูกเรนเดอร์แล้ว
Additive Stencil Shadows (SHADOWTYPE_STENCIL_ADDITIVE) เป็นเทคนิคในการเรนเดอร์ แหล่งกำเนิดแสงแต่ละจุด ทีละดวงๆ ใช้การ์ดกราฟฟิคที่หนัก แต่ได้แสงเงาที่สวย
สำหรับตัวของเอนจิ้นของ Ogre เองนั้นไม่มีการสนับสนุน soft shadow ในตัวมันเอง แต่สามารถที่จะเขียนเองได้ผ่าน vertex และ fragment programs
*คำเตือนการใช้เงาบางชนิด จำเป็นต้องเซตสีให้เป็น 32 bits
import ogre.renderer.OGRE as ogre import SampleFramework as sf class TutorialApplication(sf.Application): def _createScene(self): sceneManager = self.sceneManager #ตั้งค่า ambient light ให้มืดสนิท sceneManager.ambientLight = (0, 0, 0) sceneManager.shadowTechnique = ogre.SHADOWTYPE_STENCIL_ADDITIVE # สร้างตัวละครจาก Mesh ที่มีอยู่แล้ว ent = sceneManager.createEntity('Ninja', 'ninja.mesh') ent.castShadows = True sceneManager.getRootSceneNode().createChildSceneNode().attachObject(ent) # สร้างพื้นเป็นที่รับเงาที่ทอดจาก ตัวละคร plane = ogre.Plane ((0, 1, 0), 0) meshManager = ogre.MeshManager.getSingleton () meshManager.createPlane ('Ground', 'General', plane, 1500, 1500, 20, 20, True, 1, 5, 5, (0, 0, 1)) ent = sceneManager.createEntity('GroundEntity', 'Ground') sceneManager.getRootSceneNode().createChildSceneNode ().attachObject (ent) ent.setMaterialName ('Examples/Rockwall') ent.castShadows = False #สร้างตัวกำเนิดแสงเป็นแบบ point light light = self.sceneManager.createLight ('PointLight') light.type = ogre.Light.LT_POINT light.position = (150, 300, 150) light.diffuseColour = (.5, .0, .0) # Red light.specularColour = (.5, .0, .0) # ตั้งค่า distant directional light light = sceneManager.createLight ('DirectionalLight') light.type = ogre.Light.LT_DIRECTIONAL light.diffuseColour = (.5, .5, .0) # yellow light.specularColour = (.75, .75, .75) light.direction = (0, -1, 1) # ตั้งค่า spot light light = sceneManager.createLight ('SpotLight') light.type = ogre.Light.LT_SPOTLIGHT light.diffuseColour = (0, 0, .5) # Blue light.specularColour = (0, 0, .5) light.direction = (-1, -1, 0) light.position = (300, 300, 0) light.setSpotlightRange (ogre.Degree (35), ogre.Degree (50)) def _createCamera (self): self.camera = self.sceneManager.createCamera ('PlayerCam') self.camera.position = (0, 150, -500) self.camera.lookAt ((0, 0, 0)) self.camera.nearClipDistance = 5 def _createViewports (self): viewport = self.renderWindow.addViewport (self.camera) viewport.backGroundColor = (0, 0, 0) self.camera.aspectRatio = float (viewport.actualWidth) / float (viewport.actualHeight) if __name__ == '__main__': ta = TutorialApplication () ta.go ()
ภาพที่ได้
หลังจากจบบทที่สองนี้แล้ว คิดว่าคงไม่แปลต่อละไงก็ไปดูต้นฉบับได้ที่ Pyogre wiki นะครับ จะได้เวลาลงมือเขียนโปรแกรมจริงจังซะที
ไม่มีความคิดเห็น:
แสดงความคิดเห็น