Графическая библиотека одного дня (320x200x256)

Графическая библиотека одного дня (320x200x256)

Графическая библиотека одного дня (320x200x256)

Библиотека была написана для использования в серии простых лабораторных работ, не помню точно, вроде по компьютерной графике. Писалась быстро и оперативно, минимум функций — максимум скорости.

Линия написана (по Брезенхему) на ассемблере, залитый треугольник тоже на ассемблере (треугольник писал не я, но рисуется он быстро) а все остальное на сях.

Скачать в архиве (ZIP, 7Kb)

mode_320.cpp

  1. #include <conio.h>
  2. #include <stdlib.h>
  3. #include "mode_320.h"
  4.  
  5. //############################ Вывод точки
  6. void putpixel(unsigned int X,unsigned int Y,unsigned char Color)
  7. {
  8. asm {
  9. mov ax, [Y]
  10. mov dx, 320
  11. imul dx
  12. add ax, [X]
  13. mov di, ax
  14. push es
  15. mov ax, 0xA000
  16. mov es, ax
  17. mov al,[Color]
  18. stosb
  19. pop es
  20. }
  21. }
  22.  
  23. //################ Алгорит Брезенхема для рисования эллипса
  24. void ellipse(int x, int y, int a, int b, int color)
  25. {
  26. int col,i,row,bnew;
  27. long a_square,b_square,
  28. two_a_square,two_b_square,
  29. four_a_square,four_b_square,d;
  30.  
  31. b_square=b*b;
  32. a_square=a*a;
  33. row=b;
  34. col=0;
  35. two_a_square=a_square<<1;
  36. four_a_square=a_square<<2;
  37. four_b_square=b_square<<2;
  38. two_b_square=b_square<<1;
  39. d=two_a_square*((row-1)*(row))+a_square+two_b_square*(1-a_square);
  40. while(a_square*(row)>b_square*(col))
  41. {
  42. putpixel(col+x,row+y,color);
  43. putpixel(col+x,y-row,color);
  44. putpixel(x-col,row+y,color);
  45. putpixel(x-col,y-row,color);
  46. if (d>=0)
  47. {
  48. row--;
  49. d-=four_a_square*(row);
  50. }
  51. d+=two_b_square*(3+(col<<1));
  52. col++;
  53. }
  54. d=two_b_square*(col+1)*col+two_a_square*(row*(row-2)+1)+(1-two_a_square)*b_square;
  55. while ((row) + 1)
  56. {
  57. putpixel(col+x,row+y,color);
  58. putpixel(col+x,y-row,color);
  59. putpixel(x-col,row+y,color);
  60. putpixel(x-col,y-row,color);
  61. if (d<=0)
  62. {
  63. col++;
  64. d+=four_b_square*col;
  65. }
  66. row--;
  67. d+=two_a_square*(3-(row <<1));
  68. }
  69. }
  70. void main(void)
  71. {
  72. int X,Y;
  73.  
  74. asm mov ax,0x0013
  75. asm int 0x10
  76. while (!kbhit()) putpixel(random(320),random(200),random(255));
  77. getch();
  78. while (!kbhit()) line (random(320),random(200),random(320),random(200),random(255));
  79. getch();
  80. while (!kbhit())
  81. {
  82. X=50+random(220);
  83. Y=50+random(100);
  84. ellipse(X,Y,1+random(48),1+random(48),random(255));
  85. }
  86. getch();
  87. while (!kbhit()) triangle(random(320),random(200),random(320),random(200),random(320),random(200),random(255),0xA000);
  88. getch();
  89. }

Download this code: demo_3201.cpp

mode_320.h

  1. extern "C" {
  2.  
  3. extern void line(int x1, int y1, int x2, int y2, int color);
  4. extern int triangle(int x0, int y0, int x1, int y1, int x2, int y2, unsigned color,unsigned BUFFER);
  5.  
  6. }

Download this code: mode_320.h

Комментарии