purebasic.info

PureBasic forum
Текущее время: Ср апр 25, 2018 7:42 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 06, 2010 4:38 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср апр 04, 2007 6:21 pm
Сообщений: 126
Откуда: Челябинская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот алгоритм, позволяющий создать "замкнутую" (повторяемую) текстуру - Каменная стена:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
EnableExplicit
 
Define.l w,h
 
w=256
h=256
CreateImage(0,w,h,32)
 
Procedure.f Distance(x1.f, y1.f, x2.f, y2.f, w.f, h.f)
   Protected dx.f, dy.f
   dx=Abs(x1-x2)
   If dx>w/2: dx=w-dx: EndIf
   dy=Abs(y1-y2)
   If dy>h/2: dy=h-dy: EndIf
   ProcedureReturn Sqr(dx*dx+dy*dy)
EndProcedure
 
Procedure.l MixColors(*c1.l,*c2.l,v.l) ; v - соотношение цветов (0 - будет полностью 1-й цвет; 256 - 2-й цвет)
   Protected c.l
   PokeC(@c,(PeekC(@*c1)*(256-v)+PeekC(@*c2)*v)>>8)       ; R
   PokeC(@c+1,(PeekC(@*c1+1)*(256-v)+PeekC(@*c2+1)*v)>>8) ; G
   PokeC(@c+2,(PeekC(@*c1+2)*(256-v)+PeekC(@*c2+2)*v)>>8) ; B
   ProcedureReturn c
EndProcedure
 
Procedure DrawStones(w.l, h.l, size.l, th.f, back.l, fore1.l, fore2.l) ; ширина, высота, размер, толщина границы, цвет фона, 2 цвета камня
   Protected x.l, y.l, i.l, i1.l, sn.l
   Protected d.f, d1.f, d2.f
   sn=w*h/size/size ; вычисляем количество
   Dim s.Point(sn-1)
   For i=0 To sn-1 ; размещаем
      Repeat
         s(i)\x=Random(w-1)
         s(i)\y=Random(h-1)
         d1=w+h
         For i1=0 To i-1 ; проверяем, чтобы не находились близко; если убрать проверку, то будут толстые прослойки и нереалистичный вид
            d=Distance(s(i)\x,s(i)\y,s(i1)\x,s(i1)\y,w,h)
            If d<d1
               d1=d
            EndIf
         Next
      Until d1>size*3/4 ; это число - тщательность проверки; при 1/2 эффекта мало, при 1 зацикливается
   Next
   For y=0 To h-1
      For x=0 To w-1
         d1=w+h
         d2=w+h
         For i=0 To sn-1
            d=Distance(x,y,s(i)\x,s(i)\y,w,h)
            If d<d1
               d2=d1
               d1=d
            ElseIf d<d2
               d2=d
            EndIf
         Next
         ; теперь d1 = расстояние от текущей точки до центра блишайшего камня
         ; d2 = расстояние до центра второго по удалённости камня, а также
         ; расстояние от центра блишайшего до прослойки
         ; d2-d1 = расстояние до прослойки между камнями
         If d2-d1>th
            Plot(x,y,MixColors(fore1,fore2,Pow(d1/(d2-th),3)*256.0))
         Else
            Plot(x,y,back)
         EndIf
         ;Plot(x,y,200-d1/2)
      Next
      ;Debug d1
   Next
EndProcedure
 
StartDrawing(ImageOutput(0))
   DrawStones(w,h,50,5,RGB(53, 50, 46),RGB(240, 219, 177),RGB(143, 80, 34))
StopDrawing()
 
OpenWindow(0,200,100,w*2+1,h,"Изображение (показаны 2 копии)",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,w,h,ImageID(0))
ImageGadget(1,w+1,0,w,h,ImageID(0))
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow


_________________
Loading... 99%


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 07, 2010 4:14 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2270
Откуда: Russia — Belarus
Благодарил (а): 5 раз.
Поблагодарили: 71 раз.
Пункты репутации: 11
0Q, ничего себе, а как смотришь на то, что бы создать программу по тайлингу текстур (замыканию)?Она была бы очень востребовательна. Я знаю только одну — AutoSeamer.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 07, 2010 7:55 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср апр 04, 2007 6:21 pm
Сообщений: 126
Откуда: Челябинская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Если за основу взять готовое пиксельное изображение, то единственное, что можно сделать, - это "смешать" противоположные края рисунка. Для качественного результата нужно текстуру рисовать алгоритмически.

:idea: а вот, придумал: в графическом редакторе создать изображение в 2 раза больше текстуры (например, 512*2=1024). На четырёх его частях рисуем одну и ту же картину, при вставке изображения "извне" также размножаем его в 4 раза. Ко всему рисунку можно применять эффекты (размытие, рельеф и т.д.). Потом в конце из середины вырезаем кусок 512*512 - это и будет текстура.

_________________
Loading... 99%


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 06, 2010 8:56 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср апр 04, 2007 6:21 pm
Сообщений: 126
Откуда: Челябинская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Уникальный алгоритм - Сферическая текстура 8) :D

Вот прога для её создания
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
EnableExplicit
 
Define.l w,h
 
w=256
h=256
CreateImage(0,w,h,32)
 
Structure st
   phi.f
   psi.f
EndStructure
 
Procedure.f Distance(phi1.f, psi1.f, phi2.f, psi2.f)
   ProcedureReturn ACos(Sin(phi1)*|!REG3XP3!>Sin(phi2)+Cos(phi1)*|!REG3XP3!>Cos(phi2)*|!REG3XP3!>Cos(psi1-psi2))
EndProcedure
 
Procedure.l MixColors(*c1.l,*c2.l,v.l) ; v - соотношение цветов (0 - будет полностью 1-й цвет; 256 - 2-й цвет)
   Protected c.l
   PokeC(@c,(PeekC(@*c1)*(256-v)+PeekC(@*c2)*v)>>8)       ; R
   PokeC(@c+1,(PeekC(@*c1+1)*(256-v)+PeekC(@*c2+1)*v)>>8) ; G
   PokeC(@c+2,(PeekC(@*c1+2)*(256-v)+PeekC(@*c2+2)*v)>>8) ; B
   ProcedureReturn c
EndProcedure
 
Procedure DrawStones(w.l, h.l, size.f, th.f, back.l, fore1.l, fore2.l) ; ширина, высота, угловой размер, угловая толщина границы, цвет фона, 2 цвета камня
   Protected x.l, y.l, i.l, i1.l, sn.l
   Protected phi.f, psi.f
   Protected d.f, d1.f, d2.f
   sn=4*| style="color: #924B72;">#PI/size/size ; вычисляем количество
   Dim s.st(sn-1)
   For i=0 To sn-1 ; размещаем
      Repeat
         s(i)\phi=Random(#PI*2e6)/1e6
         s(i)\psi=ASin(Random(2e6)/1e6-1)
         d1=#PI
         For i1=0 To i-1 ; проверяем, чтобы не находились близко; если убрать проверку, то будут толстые прослойки и нереалистичный вид
            d=Distance(s(i)\phi,s(i)\psi,s(i1)\phi,s(i1)\psi)
            If d<d1
               d1=d
            EndIf
         Next
      Until d1>size*2/3 ; это число - тщательность проверки
   Next
   For y=0 To h-1
      For x=0 To w-1
         psi=x*2*| style="color: #924B72;">#PI/w
         phi=(y/(h-1)-0.5)*| style="color: #924B72;">#PI
         d1=#PI
         d2=#PI
         For i=0 To sn-1
            d=Distance(phi,psi,s(i)\phi,s(i)\psi)
            If d<d1
               d2=d1
               d1=d
            ElseIf d<d2
               d2=d
            EndIf
         Next
         ; теперь d1 = расстояние от текущей точки до центра блишайшего камня
         ; d2 = расстояние до центра второго по удалённости камня, а также
         ; расстояние от центра блишайшего до прослойки
         ; d2-d1 = расстояние до прослойки между камнями
         If d2-d1>th
            Plot(x,y,MixColors(fore1,fore2,Pow(d1/(d2-th),3)*256.0))
         Else
            Plot(x,y,back)
         EndIf
         ;Plot(x,y,200-d1/2)
      Next
      ;Debug d1
   Next
EndProcedure
 
;Debug ImageID(0)
;Debug ImageOutput(0)
StartDrawing(ImageOutput(0))
   DrawStones(w,h,0.4,0.04,RGB(53, 50, 46),RGB(240, 219, 177),RGB(143, 80, 34))
StopDrawing()
 
SaveImage(0,"textures\stonesphere.bmp")
 
OpenWindow(0,200,100,w*2+1,h,"Изображение (показаны 2 копии)",#PB_Window_SystemMenu)
;CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,w,h,ImageID(0))
ImageGadget(1,w+1,0,w,h,ImageID(0))
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow



Вот прога для просмотра сферической текстуры (создаёт сферу)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
If InitEngine3D()=0: End: EndIf
If InitKeyboard()=0: End: EndIf
If InitMouse()=0: End: EndIf
If InitSprite()=0: End: EndIf
 
sw=GetSystemMetrics_(#SM_CXSCREEN)
sh=GetSystemMetrics_(#SM_CYSCREEN)
 
If OpenScreen(sw,sh,32,"Sphere")<>0
ElseIf OpenScreen(sw,sh,24,"Sphere")<>0
ElseIf OpenScreen(sw,sh,16,"Sphere")=0
   End
EndIf
 
Add3DArchive("textures\", #PB_3DArchive_FileSystem)
CreateCamera(0,0,0,100,100)
CameraFOV(0,75*| style="color: #924B72;">#PI/180)
;SkyBox("sea.tga")
AmbientColor(RGB(72,82,92))
 
 
 
Structure v3d
   x.f
   y.f
   z.f
   nx.f
   ny.f
   nz.f
   c.l
   u.f
   v.f
EndStructure
 
Structure face
   v1.w
   v2.w
   v3.w
EndStructure
 
camdist.f = 120
angx.f=#PI/5
angy.f=#PI/3
 
Procedure CreateSphere(Mesh.l, Radius.f, Sectors.l, Segments.l)
   Protected v.l
   Protected x.l, y.l
   Protected phi.f, psi.f
   Protected face.l
   
   If radius<=0 Or mesh<0 Or sectors<3 Or segments<2
      ProcedureReturn 0
   EndIf
   
   v=(sectors+1)*(segments+1)
   Dim v.v3d(v)
   Dim f.face(sectors*(segments-1)*2) ; sectors+sectors*(segments-2)*2+sectors
   
   For x=0 To sectors
      phi=x*2.0*| style="color: #924B72;">#PI/sectors
      For y=0 To segments
         psi=#PI/2-y*| style="color: #924B72;">#PI/segments
         With v(x+y*(sectors+1))
            \nx=Cos(phi)*|!REG3XP3!>Cos(psi)
            \ny=Sin(psi)
            \nz=Sin(phi)*|!REG3XP3!>Cos(psi)
            \x=radius*\nx
            \y=radius*\ny
            \z=radius*\nz
            \c=0
            \u=x/sectors
            \v=y/segments
         EndWith
      Next
   Next
   
   For x=0 To sectors-1
      With f(x)
         \v1=x+1
         \v2=x+sectors+2
         \v3=x+sectors+1
      EndWith
   Next
   
   For y=1 To segments-2
      For x=0 To sectors-1
         With f(sectors+(y-1)*sectors*2+x*2)
            \v1=x+y*(sectors+1)
            \v2=x+y*(sectors+1)+1
            \v3=x+(y+1)*(sectors+1)
         EndWith
         With f(sectors+(y-1)*sectors*2+x*2+1)
            \v1=x+y*(sectors+1)+1
            \v2=x+(y+1)*(sectors+1)+1
            \v3=x+(y+1)*(sectors+1)
         EndWith
      Next
   Next
   
   y=segments-1
   For x=0 To sectors-1
      With f(sectors*(segments-2)*2+sectors+x)
         \v1=x+y*(sectors+1)
         \v2=x+y*(sectors+1)+1
         \v3=x+(y+1)*(sectors+1)
      EndWith
   Next
   
   If CreateMesh(mesh,v)
      SetMeshData(Mesh,#PB_Mesh_Vertex|#PB_Mesh_Normal|#PB_Mesh_Color|#PB_Mesh_UVCoordinate,@v(),v)
      SetMeshData(Mesh,#PB_Mesh_Face,@f(),sectors*(segments-1)*2)
      ProcedureReturn MeshID(mesh)
   EndIf
   
EndProcedure
 
CreateSphere(0,50,40,30)
CreateMaterial(0,LoadTexture(0,"stonesphere.bmp"))
CreateEntity(0,MeshID(0),MaterialID(0),0,0,0)
;EntityRenderMode(0,#PB_Entity_Wireframe)
CreateLight(0,#White,2560,1640,0)
 
Repeat
   ExamineKeyboard()
   
   ExamineMouse()
   camdist-MouseWheel()*10
   If camdist<90:camdist=90:EndIf
   If camdist>150:camdist=150:EndIf
   angy+MouseDeltaX()/200
   angx+MouseDeltaY()/200
   If angx>=#PI/2 : angx=#PI/2-0.01:EndIf
   If angx<=-#PI/2 : angx=-#PI/2+0.01:EndIf
   CameraLocate (0, camdist*|!REG3XP3!>Cos(angx)*|!REG3XP3!>Cos(angy), camdist*|!REG3XP3!>Sin(angx), camdist*|!REG3XP3!>Cos(angx)*|!REG3XP3!>Sin(angy))
   ;CameraLocate (0, 0, 0, -camdist)
   CameraLookAt(0,0,0,0)
   
   RenderWorld()
   FlipBuffers()
Until KeyboardPushed(#PB_Key_All)



(проблема была в том, что в 4.40 нет функции TextureOutput и нельзя рисовать на самой текстуре) :?

_________________
Loading... 99%


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 06, 2010 10:01 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2270
Откуда: Russia — Belarus
Благодарил (а): 5 раз.
Поблагодарили: 71 раз.
Пункты репутации: 11
Отлично, правда в просмотре пришлось уменьшить сферу, а то камера ней появлялась.

0Q писал(а):
проблема была в том, что в 4.40 нет функции TextureOutput и нельзя рисовать на самой текстуре

А известно ли чем это обусловлено?

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс окт 02, 2011 5:19 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб авг 18, 2007 6:26 pm
Сообщений: 605
Откуда: Северодвинск/Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
qpAHToMAS писал(а):
А известно ли чем это обусловлено?

судя по всему, производительностью. Рисование в текстуру - это передача с видеокарты в оперативку и обратно. Это основной боттлнэк для графики.

_________________
http://www.youtube.com/watch?v=XHosLhPEN3k


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 6:43 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 222
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
вот еще алгоритм генерации текстуры, считается медленно из-за sqrt, на асме доведено до 200 байт.
ногами за кривой код не пинайте)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
xres=256
yres=256
points=32
Dim vx(points,2)
Dim vl.f(points,1)
RandomSeed(100)
 
For ii=0 To points
  vx(ii,0)=Random(xres)
  vx(ii,1)=Random(yres)
Next ii
If OpenWindow(0, 0, 0, xres, yres, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, xres, yres) And StartDrawing(ImageOutput(0))
       For x = 0 To xres-1
         For y = 0 To yres-1
           For ii=0 To points
             xx=vx(ii,0)-x
           yy=vx(ii,1)-y
           vl(ii,0)=Sqr(xx*xx+yy*yy)
           
           If ii=0
               aa.f=vl(0,0)
           EndIf
            If aa>vl(ii,0):aa=vl(ii,0):EndIf
          Next ii
         rr=255-aa:If rr<0:rr=0:EndIf
         gg=255-aa*1.1:If gg<0:gg=0:EndIf
         bb=255-aa*1.3:If bb<0:bb=0:EndIf
         Plot(x, y, RGB(rr*2,gg*2,bb*2))
         Next y
      Next x
   
      StopDrawing()
      ImageGadget(0, 0, 0, xres, yres, ImageID(0))
      SaveImage(0,"scum.bmp",#PB_ImagePlugin_BMP)
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
 
; IDE Options = PureBasic 4.60 (Windows - x86)
; CursorPosition = 1
; EnableXP



Вложения:
scum.gif [37.05 KiB]
Скачиваний: 47

_________________
Захотелось мартышки любви со слоном, тут она и лопнула
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 7:44 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
egons
Спасибо, интересно. А есть ещё чего нибудь подобное? И как этот пример сделать цветным, т.е. оттенком кокого нибудь цвета(красного, фиолетового, синего и т.д.)?

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 8:13 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 222
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
lakomet писал(а):
egons
Спасибо, интересно. А есть ещё чего нибудь подобное? И как этот пример сделать цветным, т.е. оттенком кокого нибудь цвета(красного, фиолетового, синего и т.д.)?

Сотовая связь, легкие и ягодицы
это основа алгоритма, должно быть описание раскраски. правда я пузырьковую сортировку модифицировал, забросил пока разработку.
вот еще:
Этюды о бесполезной красоте
или
Filigrams: A New Type of Pretty Picture
и классика:

Generating textures for 64k intros

Код:
1
2
3
4
         rr=255-aa:If rr<0:rr=0:EndIf 
          gg=255-aa*1.1:If gg<0:gg=0:EndIf
          bb=255-aa*1.3:If bb<0:bb=0:EndIf
          Plot(x, y, RGB(rr*2,gg*2,bb*2))


отдельно цветную раскраску можно поменять в коде, например gg=0, bb=0

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 8:52 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
egons
Ещё раз спасибо. Однако времени на изучение всего этого увы :( и ах :cry:
Еслиб кинул готовых примеров, то количеству бладарных слов, не было бы предела :roll:

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 8:57 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 222
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
lakomet писал(а):
egons
Ещё раз спасибо. Однако времени на изучение всего этого увы :( и ах :cry:
Еслиб кинул готовых примеров, то количеству бладарных слов, не было бы предела :roll:


кто б меня GL Shader'ам научил :lol: если будет время и желание, если результат удовлетворит, то опубликую.

вот еще один алгоритм, популярный в DOS интрах.


Вложения:
backgrnd.png [16.8 KiB]
Скачиваний: 50

_________________
Захотелось мартышки любви со слоном, тут она и лопнула
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 9:29 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
egons
Ну примерно такую картинку мне и надо, нарисовать программно, только хде сам алгоритм :D

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 9:30 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 222
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
lakomet писал(а):
egons
Ну примерно такую картинку мне и надо, нарисовать программно, только хде сам алгоритм :D


сделаю на днях, не на АСМе же публиковать :roll:

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 12:24 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 222
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
shr byte [di-$280],4
mov ah,dh
sar ah,04
inc ah
mov al,byte [di-320]
add al,byte [di-319]

rcr al,1

теперь осталось разобраться, как выделенные инструкции правильно ассемблируются.

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 05, 2012 1:17 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
Код:
1
2
3
shr byte [di-$280],4 <=> PokeB(di - $280, PeekB(di - $280) >> 4)
mov al,byte [di-320] <=> al = PeekB(di-320)
add al,byte [di-319] <=> al + PeekB(di-319)



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB