pos機(jī)相機(jī)背景

 新聞資訊2  |   2023-08-08 10:25  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)相機(jī)背景,python3D編程概念的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)相機(jī)背景的問(wèn)題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機(jī)相機(jī)背景

pos機(jī)相機(jī)背景

前面4節(jié)課程,基本都是在宇宙中觀察,這次讓我們回到地球上,看看人間的朝朝暮暮。同時(shí),學(xué)習(xí)更多的3d編程的概念:相機(jī)、節(jié)點(diǎn)樹(shù)與鍵盤(pán)控制。

相機(jī)

在3D編程中,相機(jī)是一個(gè)基本概念。我們從屏幕上看到的畫(huà)面,正是系統(tǒng)內(nèi)三維世界對(duì)相機(jī)的一個(gè)投影。相機(jī)與聚光燈光源的設(shè)置類似,有位置、朝向?qū)傩裕送膺€有一個(gè)所謂的透鏡屬性。這個(gè)透鏡決定了相機(jī)的視角有多寬。

屏幕3D不能和人眼相比的一個(gè)關(guān)鍵因素就在這里,屏幕視角一般以40度為適當(dāng),視角太大則畫(huà)面嚴(yán)重失真。而人類的掃視視角則可以寬達(dá)150度。所以人類在自然的天空找太陽(yáng)是非常容易的,但是在屏幕上三維世界中,只有40度的視角,想從天上找到太陽(yáng)就得費(fèi)點(diǎn)事了。

相機(jī)還有另外一個(gè)特點(diǎn)是:對(duì)于距離極近的事物,相機(jī)就看不到了,即使勉強(qiáng)展示也只不過(guò)是一片純色。所以我們的相機(jī)不能太貼近地面,否則就看不到地面。

節(jié)點(diǎn)樹(shù)

熊貓引擎的所有可見(jiàn)事物,都稱作節(jié)點(diǎn),節(jié)點(diǎn)采用樹(shù)狀的方式來(lái)組織管理。最基本的世界節(jié)點(diǎn)叫做render,我們?cè)谇懊娴拇a中已經(jīng)看過(guò)了,所有的模型必須最終關(guān)聯(lián)到render才可見(jiàn)。

在節(jié)點(diǎn)樹(shù)中,所有下級(jí)節(jié)點(diǎn)都會(huì)跟隨上級(jí)節(jié)點(diǎn)一起運(yùn)動(dòng)。而下級(jí)節(jié)點(diǎn)的坐標(biāo)也都是參照上級(jí)節(jié)點(diǎn)而言的。這就帶來(lái)了很多便利。

cm = panda3d.core.CardMaker('') cm.setFrame(-2, 2, -2, 2) floorTex = loader.loadTexture('grass.jpg') self.earth = render.attachNewNode(panda3d.core.PandaNode("floor")) for y in range(12): for x in range(12): nn = self.earth.attachNewNode(cm.generate()) nn.setP(-90) nn.setPos((x - 6) * 4, (y - 6) * 4, 0) self.earth.setTexture(floorTex) self.camera.reparentTo(self.earth)

這次,我們的地球不再使用球體,而是一個(gè)虛擬節(jié)點(diǎn)。然后用CardMaker建立若干(144)片草地鋪成地面。這里的CardMaker負(fù)責(zé)建立一個(gè)簡(jiǎn)單的矩形平面,在它的表面貼上素材,模擬草地。每片草地都掛接在earth節(jié)點(diǎn)下,同時(shí)把相機(jī)(camera)也掛接在earth節(jié)點(diǎn)下。

這樣,當(dāng)?shù)厍蚬?jié)點(diǎn)做自轉(zhuǎn)運(yùn)動(dòng)時(shí),所有的草地與我們的相機(jī)都會(huì)跟隨轉(zhuǎn)動(dòng)。

地球自轉(zhuǎn):

self.angle += delta * speed angleRadians = self.angle * (pi / 180.0) self.earth.setHpr(0, self.angle, 0)太陽(yáng)和光源

一如既往的,我們把太陽(yáng)和光源放在同一個(gè)位置。由于這次有了地球的自轉(zhuǎn),我們只須讓太陽(yáng)和光源都固定不變即可。

self.sun = loader.loadModel("sphere") sunMaterial = panda3d.core.Material() sunMaterial.setEmission((1, 1, 1, 0.2)) self.sun.setMaterial(sunMaterial) self.sun.reparentTo(render) self.sun_tex = loader.loadTexture("sun_1k_tex.jpg") self.sun.setTexture(self.sun_tex, 1) self.sun.setScale(3) self.sun.setPos(0, -10, 50) self.light.setPos(0, -10, 50)

為了避免日落后3D世界中真正的一片漆黑,這次是必須放一個(gè)背景光源了。

self.alight = render.attachNewNode(panda3d.core.AmbientLight("Ambient")) self.alight.node().setColor(panda3d.core.LVector4(0.12, 0.12, 0.12, 1)) sunlight = panda3d.core.PointLight('plight') self.light = render.attachNewNode(sunlight) render.setLight(self.light) render.setLight(self.alight)鍵盤(pán)控制

為了能夠更好地進(jìn)行觀察,我們這次加入兩組鍵盤(pán)控制:左右鍵讓視角左轉(zhuǎn)和右轉(zhuǎn),上下鍵則對(duì)應(yīng)著抬頭和低頭。左右鍵是360度連續(xù)運(yùn)動(dòng),而上鍵則以抬頭至90度為止,下鍵則以視角平視為止(低頭看地板也沒(méi)什么意思)。

鍵盤(pán)控制,通過(guò)accept函數(shù)來(lái)定義:

self.keys = {} for key in ['arrow_left', 'arrow_right', 'arrow_up', 'arrow_down']: self.keys[key] = 0 self.accept(key, self.push_key, [key, 1])

其中,self.push_key是一個(gè)函數(shù):

def push_key(self, key, value): self.keys[key] = value

鍵盤(pán)只記錄,而對(duì)鍵盤(pán)效果的處理,仍然放在定時(shí)任務(wù)中。

delta = globalClock.getDt() self.camera.setPos(self.camx, self.camy, 3) self.heading += (delta * 90 * self.keys['arrow_left'] + delta * 90 * -self.keys['arrow_right']) self.pitch += (delta * 90 * self.keys['arrow_up'] + delta * 90 * -self.keys['arrow_down']) if self.pitch>90: self.pitch= 90 elif self.pitch<0: self.pitch= 0 self.camera.setHpr(self.heading, self.pitch, 0) self.camera.setPos(self.camx, self.camy, 3)

以上就是關(guān)于pos機(jī)相機(jī)背景,python3D編程概念的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)相機(jī)背景的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://www.tjfsxbj.com/newsone/95739.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。