[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Panda3D - по русски » Panda3D » Общие вопросы » Эмулятор космоса. Наложение текстур на двустороннюю модель. (Пропадание части текстуры на определённых расстояниях.)
Эмулятор космоса. Наложение текстур на двустороннюю модель.
filkar2005Дата: Среда, 07.04.2021, 19:16 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 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
 
Форум Panda3D - по русски » Panda3D » Общие вопросы » Эмулятор космоса. Наложение текстур на двустороннюю модель. (Пропадание части текстуры на определённых расстояниях.)
  • Страница 1 из 1
  • 1
Поиск: