Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 17:43   #1
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
Восклицание Рисование тени конуса

Здравствуйте!
Сразу говорю- надо написать это для блендера на opengl & python.
Есть конус. Надо написать прогу : движется источник света на конус и отбрасывается тень на плоскость y=0.
Вобщем-то я знаю как что сделать.
Проблема в том, что моя тень(треугольник) не рисуется.
В чем ошибка?
Рисование тени- функция shadowL:

Код:
import time
import Blender as B
import math
import Blender.Mathutils
from Blender import Draw, BGL
from Blender.BGL import *
ob=B.Object.Get('Cone';)
msh=ob.getData(False,True)
fs=msh.faces
cntEnd=200
cnt=0

buffP=Buffer(GL_FLOAT,4,[0.,0.,20,1.]) #initial position of LIGHT0 (proj coords)
lbuf=Buffer(GL_FLOAT,4,[5.,0,5.,1.]) #initial position of LIGHT0 (proj coords)


def cngL():
global cnt
time.sleep(0.1)
if cnt==cntEnd: Draw.Exit()
cnt +=1;
lbuf[0] +=1 # changes coords after each step
lbuf[2] +=2
Draw.Redraw(1)

def createMatr(): # creates shadow matrix that transforms the original triangles into its shadow
glLightfv(GL_LIGHT0,GL_POSITION,buffP)

glEnable(GL_LIGHT0)
mmat=Buffer(GL_FLOAT,16,[buffP[2],0, 0,0 , 0,buffP[2],0,0, -buffP[0],-buffP[1],0, -1, 0,0,0, buffP[2]])
glMultMatrixf(mmat)


def triang():
pcnt=0
for ff in fs:
v=ff.no
glNormal3f(v.x,v.y,v.z)
if len(ff.verts)==3:
glBegin(GL_TRIANGLES)
for pt in ff.verts:
glVertex3f(pt.co.x+0.5,pt.co.y,pt.co.z)
glEnd()
pcnt +=1

def triang2():
pcnt=0
for ff in fs:
v=ff.no
glNormal3f(v.x,v.y,v.z)
if len(ff.verts)==3:
glBegin(GL_TRIANGLES)
for pt in ff.verts:
glVertex3f(pt.co.x-0.5,pt.co.y,pt.co.z+2)
glEnd()
pcnt +=1

def shadowL():
glBegin(GL_TRIANGLES)
glVertex3f(lbuf[0]-1,lbuf[1],lbuf[2]-1)
glVertex3f(lbuf[0],lbuf[1],lbuf[2]-1)
glVertex3f(lbuf[0],lbuf[1],lbuf[2])
glEnd()


def plane():
glBegin(GL_QUADS)
glVertex3f(20,0,10)
glVertex3f(40,0,10)
glVertex3f(40,0,20)
glVertex3f(20,0,20) # plane where we see shadow
glEnd()

def key(evt,val):
if evt==Draw.ESCKEY: Draw.Exit()
def gui():
glClearColor(0,1,0,1)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)


glViewport(0,200,500,300)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-2,2,-2,2,-100,500)

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0,0,-8)
# glRotatef(ang,1,1,1)
triang()
triang2()
shadowL()
# glClearColor(0,1,0,1)
# glColor3f(1,1,1)
# plane()
cngL()

Draw.Register(gui,key,None)
bill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2D Динамические Тени. Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 27 27.02.2011 10:45
статья - Делаем динамические тени на OPENGL. Часть 1 Pblog Обсуждение статей 0 25.08.2010 20:00
Эффект падения тени??? Миша Общие вопросы Delphi 6 08.04.2010 19:26
Помогите с построением тени в OpenGL PitNN Помощь студентам 4 08.04.2010 14:05
Тени в OpenGL - оцените, пожалуйста мой метод... WittySpark Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 14.11.2007 17:54