У меня проблема с кодом ... Код (Text): mov ecx, 128*128*3 .gen_tex: inc eax jmp .next .new: xor eax,eax inc ebx .next: cmp eax,127 je .new cmp ebx,127 je .exit mov [x],eax mov [y],ebx mov [color],64 fild dword [x] fisub dword [color] fmul st,st fistp dword [x] fild dword [y] fisub dword [color] fmul st,st fadd dword [x] fsqrt fmul dword [color] frndint fistp [color] mov eax,[color] mov dword [texture+ecx-3],eax sub ecx,3 test ecx,ecx jnz .gen_tex .exit: Сразу прошу прощения, и умоляю сильно не бить (ну хотябы голову не трожьте)! Я хотел сделать текстуру Environmen (ну в виде круга), а получается ж... какая-то (да простят меня всевышние).
NaZGuL А где инициализируются eax и ebx? Почему значение eax изменяется внутри цикла? (mov eax,[color])
NaZGuL Если речь идёт о построении фонгмапы, то вот кусок кода, которым я её в своих интрах генерил. Написано без особой оптимизации, поэтому просто и понятно. Код (Text): ; - phong map xor ebx,ebx mov edi,buf .p1: movzx eax,bh sub eax,127 mov [temp],eax fild dword [temp] fidiv word [int128] fmul st0,st0 movzx eax,bl sub eax,127 mov [temp],eax fild dword [temp] fidiv word [int128] fmul st0,st0 faddp st1,st0 fsqrt fld1 fsubrp st1,st0 ftst fstsw ax sahf jnb .pn fstp st0 fldz .pn: fld st0 fimul word [phong_diffuse] fstp st2 fmul st0,st0 fimul word [phong_specular] faddp st1,st0 fistp dword [temp] mov eax,[temp] cmp eax,255 jbe .ps mov al,255 .ps: stosb inc bx jnz .p1
Я посидел и надумал вот что... ;==[ Генерация текстуры ]== mov edx,tex_buf mov ecx,256 .gen: push ecx push 256 pop ecx pop ebx .gen2: xor eax,eax push ecx push ebx sub cx,128 sub bx,128 imul cx,cx imul bx,bx add cx,bx shr cx,5 cmp cx,255 jg .none mov ax,255 sub ax,cx .none: pop ebx pop ecx mov dword [edx+2],eax add edx,4 loop .gen2 mov ecx,ebx loop .gen .exit: xor ebx,ebx mov eax,ebx ;==[ ------ КОНЕЦ ----- ]== Вроде работает, но если есть замечания я в к вашим услугам. PS: Если у кого есть ссылки, поделитесь.