filkar2005 | Дата: Среда, 07.04.2021, 19:16 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 26
Награды: 0
Репутация: 0
Статус: Offline
| Я добавил в сцену огромный шар, с наложенной текстурой звёзд, пока без шейдеров. Модель в одну единицу увеличена в 50000000 раз. Вначале всё казалось нормальным, но потом было замечено, что на определённых расстояниях пропадает часть текстуры, пропавшая часть обычно близка к четырёхугольнику. С чем это может быть связанно? Также, неизвестно почему, изменилось именно в этой программе, во всех остальных всё осталось по прежнему, управление камерой по умолчанию, хотя я ничего не менял. (теперь в этой сцене отдаляет/приближает левая кнопка мыши влево/вправо, двигает вверх/вниз левая кнопка мыши вверх/вниз, двигает вправо/влево правая кнопка мыши вправо/влево, вращение осталось как было). Как это вообще могло произойти?
Добавлено (07.04.2021, 21:30) --------------------------------------------- Модель, на которую надевается текстура звёзд: ссылка
Код from panda3d.core import * from panda3d.bullet import * from direct.gui.DirectGui import * import direct.directbase.DirectStart from direct.task import Task import sys
global bliz bliz = 10000
base.cam.setPos(0, -50, 0) base.cam.lookAt(0, 0, 0) base.camLens.setNearFar(1, 10000000000) base.set_background_color(0, 0, 0, 1) # цвет фона окна base.setFrameRateMeter(True)
base.accept('escape', sys.exit)
room = render.attachNewNode("room") room.setPos(0, 0, 0) room.reparentTo(render)
debugNode = BulletDebugNode('Debug') debugNP = render.attachNewNode(debugNode) debugNP.show() world = BulletWorld() world.setDebugNode(debugNP.node()) world.setGravity(Vec3(0, 0, 0))
global all_objects all_objects = []
stars = loader.loadModel("textures/stars.obj") stars.reparent_to(render) stars.set_scale(20000000) stars_texture = loader.loadTexture("textures/звёзды.jpg") stars.set_texture(stars_texture)
class star(): def __init__(self, R, m, coord, V, name, texture): print("инициализация звезды начата") self.R = R self.m = m self.coord = coord self.V = V self.name = name self.texture = loader.loadTexture(texture) self.model = loader.loadModel("textures/планеты/планета.obj") self.model.setTexture(self.texture) self.model.setScale(R/bliz) self.model.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz) self.model.reparentTo(render) self.lightpivot = render.attachNewNode("lightpivot") self.lightpivot.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz) self.plight = PointLight('plight') self.plight.setColor((30, 30, 20, 1)) self.plnp = self.lightpivot.attachNewNode(self.plight) self.plnp.setPos(0, 0, 0) room.setLight(self.plnp) self.model.reparentTo(self.plnp) room.setShaderAuto() print("инициализация звезды закончена")
#class planet(sphere): # def __init__(self, R, m, coord, V, name, texture): # print("инициализация планеты начата") # super().__init__(R, m, coord, V, "sphere" + name) # self.texture = loader.loadTexture(texture) # self.model = loader.loadModel("textures/планеты/планета.obj") # self.model.setTexture(self.texture) # self.model.setScale(R/bliz) # self.model.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz) # self.planet_name = name # self.model.reparentTo(room) # print("инициализация планеты закончена") # def update_position(self): # global FPStime # F = F_Gravity(self.m, sun.m, vector_points(self.coord, sun.coord)) # self.V = delta_V(self.V, F, self.m, FPStime) # self.coord = delta_coord(self.coord, self.V, FPStime) # self.model.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz) # #class sputnic(sphere): # def __init__(self, R, m, coord, V, name, texture, planeta): # print("инициализация спутника начата") # super().__init__(R, m, coord, V, "sphere" + name) # self.sputnic_name = name # self.planeta = planeta # self.texture = loader.loadTexture(texture) # self.model = loader.loadModel("textures/планеты/планета.obj") # self.model.setTexture(self.texture) # self.model.setScale(R/bliz) # self.model.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz) # self.model.reparentTo(room) # print("инициализация спутника закончена") # def update_position(self): # global FPStime # F = F_Gravity(self.m, sun.m, vector_points(self.coord, sun.coord)) # F = F + F_Gravity(self.m, self.planeta.m, vector_points(self.coord, self.planeta.coord)) # self.V = delta_V(self.V, F, self.m, FPStime) # self.coord = delta_coord(self.coord, self.V, FPStime) # self.model.setPos(self.coord[0]/bliz, self.coord[1]/bliz, self.coord[2]/bliz)
class rocket: def __init__(self, m, h, r, coord): self.h = h self.r = r shape = BulletCapsuleShape(r, h - 2*r, ZUp) self.playerNode = BulletCharacterControllerNode(shape, 0.5, 'Player') self.player = room.attachNewNode(self.playerNode) self.player.setPos(coord[0], coord[1], coord[2]) self.player.setCollideMask(BitMask32.allOn()) world.attachCharacter(self.player.node()) self.playerNode.setGravity(0) # base.cam.reparentTo(self.player) # base.camLens.setNearFar(1, 10000000000) # base.cam.setPos(0, -2, 0) self.m = m self.V = Vec3(0, 0, 0) self.W = 0 def update(self): isSet = base.mouseWatcherNode.is_button_down if isSet('w'): self.V.setY(2.0) if isSet('s'): self.V.setY(-2.0) if isSet('a'): self.V.setX(-2.0) if isSet('d'): self.V.setX(2.0) if isSet('q'): self.W = 40.0 if isSet('e'): self.W = -40.0 if isSet('r'): self.doJump() self.playerNode.setAngularMovement(self.W) self.playerNode.setLinearMovement(self.V, True)
sun = star(20000, 1.9891 * (10 ** 30), [0, 0, 0], [0, 0, 0], "sun", 'textures/планеты/текстуры планет/солнце/13913_Sun_diff.jpg') player = rocket(10, 5, 1, [0, -20, 0])
def update(task): # print(globalClock.getDt()) world.doPhysics(globalClock.getDt()) player.update() return task.cont
taskMgr.add(update, 'update') base.run()
<°)))><
Сообщение отредактировал filkar2005 - Среда, 07.04.2021, 21:34 |
|
| |