Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 03.05.2009, 21:30   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Поверткесная сборка.

Сам я не очень практивоался в сабже. Мне тербуется следующая функция.
вход Xs#,Ys#,Zs#
выход дескриптор меша
описание:
функция повертексно собирает кубик с размерами по осям:
xs - абсцисса
ys - ордината
zs - аппликата
центр меша в точке [x2/2;ys/2;zs/2].
Предусмотреть возможность (реализовать) 4ого аргумента,который овтечает за направление номралей меша (из_центра/в_центр). Это позволит делать параллелепипед видмый снраужи/внтури.
Заранее спасибо.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 03.05.2009, 22:22   #2
L.D.M.T.
Бывалый
 
Аватар для L.D.M.T.
 
Регистрация: 10.06.2006
Сообщений: 808
Написано 354 полезных сообщений
(для 832 пользователей)
Ответ: Поверткесная сборка.

;Segmented cube

Function CreateSegCube(xsegs=1,ysegs=1,zsegs=1,parent=0)
Return CreateCube()
mesh=CreateMesh(parent)
For i=1 To 4
AddCubeFace(mesh, ysegs, zsegs*(i=1 Or i=4)+xsegs*(i=2 Or i=3)):RotateMesh mesh, 0, i*90, 0
Next
RotateMesh mesh, 0, 0, -90
For i=0 To 1
AddCubeFace(mesh, xsegs, zsegs):RotateMesh mesh, 0, 0, (i=0)*180
Next
RotateMesh mesh, 0, 180, 90:UpdateNormals mesh:Return mesh
End Function

Function AddCubeFace(mesh, xsegs, ysegs)
surf=CreateSurface( mesh ):xstp# = 2.0 / Float(xsegs):ystp# = 2.0 / Float(ysegs):y#=-1.0
For a=0 To ysegs
x#=-1.0:u#=Float(a)/Float(ysegs)
For b=0 To xsegs
v#=Float(b)/Float(xsegs):AddVertex(surf,1,-x,y,-u,-v)
x = x + xstp
Next
y = y + ystp
Next
For a=0 To ysegs-1
For b=0 To xsegs-1
v0=a*(xsegs+1)+b:v1=v0+1:v2=(a+1)*(xsegs+1)+b+1:v3 =v2-1
AddTriangle( surf,v0,v2,v1 ):AddTriangle( surf,v0,v3,v2 )
Next
Next
End Function
__________________
Per Aspera Ad Astra...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (04.05.2009)
Старый 04.05.2009, 10:52   #3
Venom2
 
Сообщений: n/a
Ответ: Поверткесная сборка.

функция повертексно собирает кубик
Держи, "повертекснее" некуда
Function CreateCube2(xs#, ys#, zs#, parent% = 0, invert% = 0, multi% = 0)
    Local cx#, cy#, cz#, mesh%, surf%, v1%, v2%, v3%, v4%
    ; вычисляем центр
    cx = xs * 0.5
    cy = ys * 0.5
    cz = zs * 0.5
    ; создаем меш
    mesh = CreateMesh(parent)
    ; создаем сурфейс
    surf = CreateSurface(mesh)
    ; ---------------------------------
    ; нижняя грань
    ; ---------------------------------
    v1 = AddVertex(surf, -cx, -cy, -cz, 0.0, 0.0)
    v2 = AddVertex(surf, +cx, -cy, -cz, 1.0, 0.0)
    v3 = AddVertex(surf, +cx, -cy, +cz, 1.0, 1.0)
    v4 = AddVertex(surf, -cx, -cy, +cz, 0.0, 1.0)
    ; если задан с нормалями внутрь, 
    ; здесь и далее, создаем треугольники
    ; обходя вершины в обратном порядке
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    ; ---------------------------------
    ; верхняя грань
    ; ---------------------------------
    ; если задан мультисурфейсный, здесь и далее, 
    ; создаем на каждую грань отдельную поверхность
    If (multi) Then
        surf = CreateSurface(mesh)
    EndIf
    v1 = AddVertex(surf, -cx, +cy, +cz, 0.0, 0.0)
    v2 = AddVertex(surf, +cx, +cy, +cz, 1.0, 0.0)
    v3 = AddVertex(surf, +cx, +cy, -cz, 1.0, 1.0)
    v4 = AddVertex(surf, -cx, +cy, -cz, 0.0, 1.0)
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    ; ---------------------------------
    ; левая грань
    ; ---------------------------------
    If (multi) Then
        surf = CreateSurface(mesh)
    EndIf
    v1 = AddVertex(surf, -cx, +cy, +cz, 0.0, 0.0)
    v2 = AddVertex(surf, -cx, +cy, -cz, 1.0, 0.0)
    v3 = AddVertex(surf, -cx, -cy, -cz, 1.0, 1.0)
    v4 = AddVertex(surf, -cx, -cy, +cz, 0.0, 1.0)
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    ; ---------------------------------
    ; правая грань
    ; ---------------------------------
    If (multi) Then
        surf = CreateSurface(mesh)
    EndIf
    v1 = AddVertex(surf, +cx, +cy, -cz, 0.0, 0.0)
    v2 = AddVertex(surf, +cx, +cy, +cz, 1.0, 0.0)
    v3 = AddVertex(surf, +cx, -cy, +cz, 1.0, 1.0)
    v4 = AddVertex(surf, +cx, -cy, -cz, 0.0, 1.0)
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    ; ---------------------------------
    ; передняя грань
    ; ---------------------------------
    If (multi) Then
        surf = CreateSurface(mesh)
    EndIf
    v1 = AddVertex(surf, -cx, +cy, -cz, 0.0, 0.0)
    v2 = AddVertex(surf, +cx, +cy, -cz, 1.0, 0.0)
    v3 = AddVertex(surf, +cx, -cy, -cz, 1.0, 1.0)
    v4 = AddVertex(surf, -cx, -cy, -cz, 0.0, 1.0)
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    ; ---------------------------------
    ; задняя грань
    ; ---------------------------------
    If (multi) Then
        surf = CreateSurface(mesh)
    EndIf
    v1 = AddVertex(surf, +cx, +cy, +cz, 0.0, 0.0)
    v2 = AddVertex(surf, -cx, +cy, +cz, 1.0, 0.0)
    v3 = AddVertex(surf, -cx, -cy, +cz, 1.0, 1.0)
    v4 = AddVertex(surf, +cx, -cy, +cz, 0.0, 1.0)
    If (invert) Then
        AddTriangle(surf, v1, v4, v3)
        AddTriangle(surf, v3, v2, v1)
    Else
        AddTriangle(surf, v1, v2, v3)
        AddTriangle(surf, v3, v4, v1)
    EndIf
    Return mesh
End Function

; пример

Local camera%, light%, outer_text%, outer_cube%, inner_text%, inner_cube%

Graphics3D(800, 600, 0, 2)
SetBuffer(BackBuffer())


outer_text = GenerateTexture(256, 256)
; внешний куб (обратные нормали)
outer_cube = CreateCube2(25.0, 25.0, 25.0, 0, True)
EntityTexture(outer_cube, outer_text)


inner_text = GenerateTexture( 32,  32, 30.0, 30.0)
; внутренний куб
inner_cube = CreateCube2(1.0, 1.0, 1.0)
EntityTexture(inner_cube, inner_text)

; камера
camera = CreateCamera()
PositionEntity(camera, 0.0, 0.0, -5.0)

Repeat

    TurnEntity(inner_cube, 1.0, 1.0, 1.0)
    
    RenderWorld()
    Flip()
Until (KeyDown(1))
End

; генерация текстуры :)
Function GenerateTexture(xs%, ys%, sx# = 10.0, sy# = 10.0, flags% = 1)
    Local texture%, buffer%, ix%, iy%, pixel
    texture = CreateTexture(xs, ys, flags)
    buffer = TextureBuffer(texture)
    LockBuffer(buffer)
    iy = ys
    While (iy > 0)
        iy = iy - 1
        ix = xs
        While (ix > 0)
            ix = ix - 1
            pixel = 65.0 * Sin(ix * sx) + 65.0 * Sin(iy * sy)
            WritePixelFast(ix, iy, pixel, buffer)
        Wend
    Wend
    UnlockBuffer(buffer)
    Return texture
End Function
ЗЫ
параметр multi нужен для мультисурфейсного кубика, если вдруг понадобится наложить на каждую грань свою текстуру
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
impersonalis (04.05.2009), tormoz (04.05.2009)
Старый 04.05.2009, 12:42   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Поверткесная сборка.

Отлично - чётко по ТЗ (даже найдена и реализована его неоднозначность).
Нет левых констант. Отчётливое комментирование!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.05.2009, 19:24   #5
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Поверткесная сборка.

Отлично - чётко по ТЗ (даже найдена и реализована его неоднозначность).
Ымпер, в какой тайный заговор ты набираешь конскриптов?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 04.05.2009, 20:51   #6
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Поверткесная сборка.

Сам я не очень практивоался в сабже. Мне тербуется следующая функция.
вход Xs#,Ys#,Zs#
выход дескриптор меша
описание:
функция повертексно собирает кубик с размерами по осям:
xs - абсцисса
ys - ордината
zs - аппликата
центр меша в точке [x2/2;ys/2;zs/2].
а CreateSkyBox в кастле чем не угодил?
всё более чем понятно, переделать под твои нужды можно за минуту.

xs - абсцисса
ys - ордината
zs - аппликата
и необязательно использовать извращенские словечки если можно просто сказать "Позиция по X" и тд.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (04.05.2009)
Старый 04.05.2009, 21:35   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Поверткесная сборка.

2Mr_F_
толсто!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.05.2009, 22:33   #8
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Поверткесная сборка.

да это скорее ты толст, надо умудряться так раздражать своей ботаничностью (хоть подпись твоя).
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 04.05.2009, 22:51   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Поверткесная сборка.

Нашчот
дескриптор
абсцисса
ордината
апликата
это математически более правильно так говорить, но всё же проще - лучше:
хендл
X,Y,Z
главно шоб не уходила суть проблемы

Однако, пахнет наездом.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 05.05.2009, 09:12   #10
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: Поверткесная сборка.

А наезды на человека, у которого есть доступ к админке - опасны
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:15.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com