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

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

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

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

Ответ
 
Опции темы
Старый 23.01.2008, 23:39   #1
BlackDragon
Проектировщик
 
Аватар для BlackDragon
 
Регистрация: 25.03.2007
Сообщений: 536
Написано 252 полезных сообщений
(для 715 пользователей)
Проблема с Masked

Вот код, в котором я пытаюсь сделать так, что бы черные участки были абсолютно прозрачны, но неполучается. Сколько не пытался, сам додуматься не смог, скажите, где у меня ошибка.

Код:
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

MoveMouse 320,240
zoom#=1
lmp=CreateLight()
PositionEntity lmp,0,1000,0
;=====================================
;создание основной камеры
   .ccam
campiv = CreatePivot() 
 cam = CreateCamera(campiv)
CameraClsColor cam,0,128,255
PositionEntity campiv,0,10,-70
 TurnEntity campiv,0,0,0

pln=CreatePlane()
EntityColor pln,200,24,135

;=========================================
cubic_piv=CreatePivot()
ecub_scale_x=10
ecub_scale_y=10
ecub_scale_z=10
VAR_mashtab=10

;создание дополнительной камеры для рендера в текстуру
cam1=CreateCamera(cubic_piv)
camsphere=CreateSphere(8,cam1)
PositionEntity cam1,0,0,0

;создание кубика
cubik=CreateCube(cubic_piv)
PositionEntity cubik,0,ecub_scale_y,0
ScaleEntity cubik,ecub_scale_x-1,ecub_scale_y-1,ecub_scale_z-1

;==============================================
;создание текстуры, с флагом 4, чтоб места закрашенные черным были невидимы
tex_cub1=CreateTexture(ecub_scale_x*VAR_mashtab,ecub_scale_Y*VAR_mashtab,4)
ScaleTexture tex_cub1,1.28,1.28
;создание квадрата
 spr1 = CreateMesh(cubic_piv)
sf1 = CreateSurface(spr1)
	AddVertex sf1, -1, 1, 0, 0, 0
	AddVertex sf1, 1, 1, 0, 1, 0
	AddVertex sf1, -1, -1, 0, 0, 1
	AddVertex sf1, 1, -1, 0, 1, 1
	AddTriangle sf1, 0, 1, 2
	AddTriangle sf1, 3, 2, 1
	
	ScaleEntity spr1, ecub_scale_x,ecub_scale_y,1
	PositionEntity spr1,0,ecub_scale_y,-ecub_scale_z
;натягивание текстуры на квадрат 
	EntityTexture spr1,tex_cub1
;===========================================
;прячу квадрат, что бы он не загораживал кубик
HideEntity spr1

;установка дополнительной камеры под нужным ракурсом
PositionEntity cam1,0,ecub_scale_y,-ecub_scale_z-ecub_scale_x
RotateEntity cam1,0,0,0

;собственно рендер в текстуру
CameraViewport cam1,0,0,ecub_scale_x*VAR_mashtab,ecub_scale_y*VAR_mashtab
RenderWorld
	CopyRect 0,0,ecub_scale_x*VAR_mashtab,ecub_scale_y*VAR_mashtab,0,0,BackBuffer(),TextureBuffer(tex_cub1)
	ShowEntity spr1

Repeat

;================================================
;управление перемещением основной камеры
If KeyDown(42) MoveEntity  campiv,0,1,0
If KeyDown(46) MoveEntity campiv,0,-1,0

 If KeyDown(30) MoveEntity campiv,-1,0,0
If KeyDown(32) MoveEntity campiv,1,0,0

If KeyDown(31) MoveEntity campiv,0,0,-1
If KeyDown(17) MoveEntity campiv,0,0,1

mys = MouseYSpeed() 
mxs = MouseXSpeed() 

If Abs(EntityPitch(cam)+mys) < 75
TurnEntity cam, mys,0,0 
EndIf 
TurnEntity campiv,0,-mxs,0 

If KeyDown(2) CameraProjMode cam,1
If KeyDown(3) CameraProjMode cam,2

If KeyDown(4) zoom#=1
zoom#=zoom#+MouseZSpeed () *.01
CameraZoom cam,zoom#
;=============================================

 UpdateWorld
 RenderWorld
Flip
Until KeyHit(1)
End
(Offline)
 
Ответить с цитированием
Старый 24.01.2008, 00:15   #2
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Проблема с Masked

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

MoveMouse 320,240
zoom#=1
lmp=CreateLight()
PositionEntity lmp,0,1000,0
;=====================================
;создание основной камеры
   .ccam
campiv = CreatePivot() 
 cam = CreateCamera(campiv)
CameraClsColor cam,0,128,255
PositionEntity campiv,0,10,-70
 TurnEntity campiv,0,0,0

pln=CreatePlane()
EntityColor pln,200,24,135

;=========================================
cubic_piv=CreatePivot()
ecub_scale_x=10
ecub_scale_y=10
ecub_scale_z=10
VAR_mashtab=10

;создание дополнительной камеры для рендера в текстуру
cam1=CreateCamera(cubic_piv)
camsphere=CreateSphere(8,cam1)
PositionEntity cam1,0,0,0

;создание кубика
cubik=CreateCube(cubic_piv)
PositionEntity cubik,0,ecub_scale_y,0
ScaleEntity cubik,ecub_scale_x-1,ecub_scale_y-1,ecub_scale_z-1

;==============================================
;создание текстуры, с флагом 4, чтоб места закрашенные черным были невидимы
tex_cub1=CreateTexture(ecub_scale_x*VAR_mashtab,ecub_scale_Y*VAR_mashtab,4)

ScaleTexture tex_cub1,1.28,1.28
;создание квадрата
 spr1 = CreateMesh(cubic_piv)
sf1 = CreateSurface(spr1)
    AddVertex sf1, -1, 1, 0, 0, 0
    AddVertex sf1, 1, 1, 0, 1, 0
    AddVertex sf1, -1, -1, 0, 0, 1
    AddVertex sf1, 1, -1, 0, 1, 1
    AddTriangle sf1, 0, 1, 2
    AddTriangle sf1, 3, 2, 1
    
    ScaleEntity spr1, ecub_scale_x,ecub_scale_y,1
    PositionEntity spr1,0,ecub_scale_y,-ecub_scale_z
;натягивание текстуры на квадрат 
    EntityTexture spr1,tex_cub1
;===========================================
;прячу квадрат, что бы он не загораживал кубик
HideEntity spr1

;установка дополнительной камеры под нужным ракурсом
PositionEntity cam1,0,ecub_scale_y,-ecub_scale_z-ecub_scale_x
RotateEntity cam1,0,0,0

;собственно рендер в текстуру
CameraViewport cam1,0,0,ecub_scale_x*VAR_mashtab,ecub_scale_y*VAR_mashtab
RenderWorld
    CopyRect 0,0,ecub_scale_x*VAR_mashtab,ecub_scale_y*VAR_mashtab,0,0,BackBuffer(),TextureBuffer(tex_cub1)
    ShowEntity spr1

;========= EDIT =====================
    MaskTexture(tex_cub1, 0, 0, 0)
;========= EDIT =====================

Repeat

;================================================
;управление перемещением основной камеры
If KeyDown(42) MoveEntity  campiv,0,1,0
If KeyDown(46) MoveEntity campiv,0,-1,0

 If KeyDown(30) MoveEntity campiv,-1,0,0
If KeyDown(32) MoveEntity campiv,1,0,0

If KeyDown(31) MoveEntity campiv,0,0,-1
If KeyDown(17) MoveEntity campiv,0,0,1

mys = MouseYSpeed() 
mxs = MouseXSpeed() 

If Abs(EntityPitch(cam)+mys) < 75
TurnEntity cam, mys,0,0 
EndIf 
TurnEntity campiv,0,-mxs,0 

If KeyDown(2) CameraProjMode cam,1
If KeyDown(3) CameraProjMode cam,2

If KeyDown(4) zoom#=1
zoom#=zoom#+MouseZSpeed () *.01
CameraZoom cam,zoom#
;=============================================

 UpdateWorld
 RenderWorld
Flip
Until KeyHit(1)
End


Function MaskTexture(Texture, Red, Green, Blue)
    Local MaskColor = (Red Shl 16) Or (Green Shl 8) Or Blue
    Local MaskSizeX = TextureWidth(Texture)
    Local MaskSizeY = TextureHeight(Texture)
    Local MaskBuffer = TextureBuffer(Texture)
    LockBuffer(MaskBuffer)
    For x = 0 To MaskSizeX
    For y = 0 To MaskSizeY
    Pixel = ReadPixel(x, y, MaskBuffer) And $00FFFFFF
    If (Pixel = MaskColor) Then
    WritePixel(x, y, Pixel, MaskBuffer)
    Else
    WritePixel(x, y, Pixel Or $FF000000, MaskBuffer)
    EndIf
    Next
    Next
    UnlockBuffer(MaskBuffer)
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackDragon (24.01.2008)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с С++ HAMANN C++ 10 24.12.2009 09:31
Проблема rr333 3D Моделирование 10 07.06.2009 17:08
Проблема в MP Nautilus MidletPascal 4 26.10.2008 05:30
Проблема с MP3 и EAX Maxim1441 2D-программирование 3 29.07.2008 18:29
проблема с ode jimon 3D-программирование 0 24.09.2005 17:20


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


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