update voxel tinygl viewer, use mouse to rotate model

git-svn-id: svn://kolibrios.org@5949 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2015-12-07 18:47:28 +00:00
parent bee21cb588
commit 2edaae3ebe
3 changed files with 192 additions and 27 deletions

View File

@ -0,0 +1,79 @@
<html>
<head>
<title>Оглавление</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<style>
body
{
font-size: 15px;
font-family: "Bookman Old Style";
color: black;
text-align: justify;
}
h1 { color: green; font-size: 23px; }
h2 { color: green; font-size: 21px; }
h3 { color: green; font-size: 19px; }
h4 { color: #803f00; font-size: 17px; }
i { color: #0099cc; }
b { color: #0099cc; }
p {
text-indent: 1em;
margin-top: 3px;
margin-bottom: 2px;
margin-left: 0px;
margin-right: 0px;
}
ol, ul, dl{
margin-top: 3px;
margin-bottom: 2px;
}
pre
{
padding: 2px;
padding-left: 20px;
margin-top: 5px;
margin-bottom: 5px;
margin-left: 0px;
margin-right: 0px;
font-family: "Courier New";
font-size: 15px;
color: #004000;
background-color: #ffd0ff;
}
table
{
font-size: 15px;
}
</style>
</head>
<body>
<h1>Вспомогательная программа для редактора воксельной графики версия от 07.12.2015</h1>
<p>Оглавление</p>
<ul>
<li><a href="#about">О программе</a></li>
<li><a href="#algor">Работа с программой</a>
</li>
<li>Автор</li>
</ul>
<h2><a name="about">О программе</a></h2>
<p>Программа для просмотра 3-х мерной воксельной графики с использованием библиотеки tinygl.</p>
<p><img src="vox_tgl/about.png"></p>
<p>Внешний вид программы.</p>
<p>Для просмотра 3-х мерного объекта необходимо открыть воксельное изображение из файла с расширением <b>*.vox</b>. Эти изображения можно создавать в программе воксельного редактора, но он позволяет рассматривать созданную модель только под фиксированными углами. С помощью данной утилиты можно видеть воксельный объект под разными углами обзора.</p>
<h2><a name="algor">Работа с программой</a></h2>
<p>В окне программы есть панель инструментов, окно для просмотра объекта воксельной графики и окно для показа 8-ми уменьшенных кадров объекта под фиксированными углами. Для просмотра объекта в главном окне под разными углами можно нажимать курсоры на клавиатуре или же нажимать и водить курсором мыши по окну с 3-х мерной графикой. На панели инструментов можно менять режимы обзора модели, смотреть статистику по модели и обновлять окно с миниатюрами.</p>
<h3>Описание панели инструментов</h3>
<p><img src="tb_new.png"> - создание нового файла.</p>
<p><img src="tb_open.png"> - открытие файлов.</p>
<p><img src="tb_save.png"> - сохранение файлов. Данная программа не редактирует саму модель, единственное что она может менять это уровень детализации модели который будет использоваться при открытии модели. Потому эта команда редко используется.</p>
<h2>Автор</h2>
<p>Игорь А. (IgorA) - разработка программы.</p>
<p>Лицензия свободная.</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -1,13 +1,7 @@
use32
org 0x0
db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
dd 0x1
dd start
dd i_end ;à §¬¥à ¯à¨«®¦¥­¨ï
dd mem
dd stacktop
dd 0
dd sys_path
dd 1, start, i_end, mem, stacktop, 0, sys_path
include '../../../../programs/macros.inc'
include '../../../../programs/proc32.inc'
@ -18,7 +12,7 @@ include 'vox_3d.inc'
include '../trunk/str.inc'
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel viewer 17.02.15',0 ;¯®¤¯¨áì ®ª­ 
caption db 'Voxel viewer 07.12.15',0 ;¯®¤¯¨áì ®ª­ 
struct FileInfoBlock
Function dd ?
@ -30,7 +24,11 @@ struct FileInfoBlock
FileName dd ?
ends
run_file_70 FileInfoBlock
3d_wnd_l equ 5 ;®âáâ㯠¤«ï tinygl ¡ãä¥à  á«¥¢ 
3d_wnd_t equ 30 ;®âáâ㯠¤«ï tinygl ¡ãä¥à  ᢥàåã
3d_wnd_w equ 512
3d_wnd_h equ 512
image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
@ -48,24 +46,22 @@ macro load_image_file path,buf,size { ;
db 0
@@:
;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
copy_path .path_str,[32],file_name,0x0
copy_path .path_str,[32],file_name,0
else
copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
copy_path path,[32],file_name,0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
end if
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
mov [buf],eax
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov [run_file_70.Buffer], eax
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
mcall 70,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
cmp ebx,0xffffffff
je @f
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
@ -103,7 +99,7 @@ start:
mcall 26,9
mov [last_time],eax
stdcall [kosglMakeCurrent], 5,30,512,512,ctx1
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,3d_wnd_w,3d_wnd_h,ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;¤¥« ¬ ­®à¬ «¨ ®¤¨­ ª®¢®© ¢¥«¨ç¨­ë ¢® ¨§¡¥¦ ­¨¥  àâ¥ä ªâ®¢
stdcall [glClearColor], 0.0,0.0,0.0,0.0
@ -139,6 +135,10 @@ still:
jz key
cmp al,3
jz button
cmp al,6
jne @f
call mouse
@@:
jmp still
@ -316,6 +316,88 @@ key:
jmp still
align 4
mouse:
push eax ebx
mcall 37,3
bt eax,0
jnc .end_m
;mouse l. but. move
cmp dword[mouse_drag],1
jne .end_m
mcall 37,1 ;get mouse coords
mov ebx,eax
shr ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jg @f
mov ebx,3d_wnd_l
@@:
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jle @f
mov ebx,3d_wnd_w
@@:
and eax,0xffff ;mouse.y
cmp eax,3d_wnd_t
jg @f
mov eax,3d_wnd_t
@@:
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jle @f
mov eax,3d_wnd_h
@@:
finit
fild dword[mouse_y]
mov [mouse_y],eax
fisub dword[mouse_y]
fdiv dword[angle_dxm] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ y (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ x
fadd dword[angle_x]
fstp dword[angle_x]
fild dword[mouse_x]
mov [mouse_x],ebx
fisub dword[mouse_x]
fdiv dword[angle_dym] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ x (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ y
fadd dword[angle_y]
fstp dword[angle_y]
call draw_3d
stdcall [kosglSwapBuffers]
jmp .end_d
.end_m:
bt eax,16
jnc @f
;mouse l. but. up
mov dword[mouse_drag],0
jmp .end_d
@@:
bt eax,8
jnc .end_d
;mouse l. but. press
mcall 37,1 ;get mouse coords
mov ebx,eax
shr ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jl .end_d
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jg .end_d
and eax,0xffff ;mouse.y
cmp eax,3d_wnd_t
jl .end_d
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jg .end_d
mov dword[mouse_drag],1
mov dword[mouse_x],ebx
mov dword[mouse_y],eax
.end_d:
;stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
pop ebx eax
ret
align 4
button:
mcall 17
@ -668,11 +750,11 @@ align 4
mov edi,txt_stat_m1.v
stdcall convert_int_to_str,20
;mov eax,ebx
;mov edi,txt_stat_m2.v
;stdcall convert_int_to_str,20
mov eax,ebx
mov edi,txt_stat_m2.v
stdcall convert_int_to_str,20
;stdcall str_n_cat,txt_stat_m1.v,txt_stat_m2,50
stdcall str_n_cat,txt_stat_m1.v,txt_stat_m2,50
notify_window_run txt_stat_m1
.end_stat:
ret
@ -681,7 +763,7 @@ endp
align 4
txt_stat_m1:
db '‘â â¨á⨪ ',13,10,'‚®ªá¥«¥©: '
.v: rb 50
.v: rb 70
txt_stat_m2:
db 13,10,'Žâ®¡à ¦ ¥¬ëå £à ­¥©: '
.v: rb 20
@ -717,6 +799,7 @@ draw_3d:
;­® ¢á¥ ¦¥ ¯à¨ ¯®¢®à®â å ¡ã¤ãâ ®âᥪ âáï ªà ï, ª®â®àë¥ ¢ë«¥§ãâ §  ¯à¥¤¥«ë ¯«®áª®á⥩ ®âá¥ç¥­¨ï
;¢ ¢¥àᨨ opengl ¯®¤ Win ª®®à¤¨­ âë ¨¤ãâ ®â -1.0 ¤® 1.0 ¯®â®¬ã â ¬ í⮣® ¤¥« âì ­¥ ­ã¦­®
stdcall [glScalef], [scale], [scale], [scale] ;㢥«¨ç¨¢ ¥¬ ¢®ªá¥«ì­ë© ®¡ê¥ªâ, çâ®-¡ë ­¥ ¡ë« ®ç¥­ì ¬ «¥­ìª¨¬
stdcall [glScalef], 1.0, 1.0, 0.5 ;çâ®-¡ë ªà ï ®¡ê¥ªâ  ­¥ ¢ë« §¨«¨ §  £à ­¨ ®âá¥ç¥­¨ï
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
@ -973,12 +1056,8 @@ err_msg_found_lib_3 db '
err_msg_import_3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'tinygl',39,0
;--------------------------------------------------
sc system_colors
last_time dd 0
align 16
procinfo process_information
align 4
buf_0: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
dw 530 ;+4 left
@ -1006,6 +1085,11 @@ angle_x dd 0.0
angle_y dd 0.0
angle_z dd 0.0
delt_size dd 3.0
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
mouse_x dd 0
mouse_y dd 0
angle_dxm dd 2.8444 ;~ 3d_wnd_w/180 - ¯à¨¡ ¢«¥­¨¥ 㣫®¢ ¯®¢®à®â  áæ¥­ë ¯à¨ ¢à é¥­¨¨ ¬ë襩
angle_dym dd 2.8444 ;~ 3d_wnd_h/180
opt_light dw 0 ;®¯æ¨ï ¤«ï ¢ª«î祭¨ï/¢ëª«î祭¨ï ᢥâ 
opt_cube_box dw 1 ;®¯æ¨ï ¤«ï à¨á®¢ ­¨ï à ¬ª¨ ¢®ªà㣠®¡ê¥ªâ 
@ -1026,10 +1110,12 @@ i_end:
rb 4096
stacktop:
sys_path rb 1024
file_name:
rb 1024 ;4096
file_name rb 2048
library_path rb 1024
plugin_path rb 4096
openfile_path rb 4096
filename_area rb 256
sc system_colors
procinfo process_information
run_file_70 FileInfoBlock
mem: