User Tag List

Показано с 1 по 10 из 18

Тема: Быстрая заливка треугольников...на синклер Бэйсике

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #16

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    За пару дней набросал свой редактор на SDL
    Ну вот ещё-бы вывод побыстрей.
    Вот процедура с произвольной заливкой (кажется из 3Dlame) - прикрутить сумеешь наверное.

    Скрытый текст


    Код:
    	DEVICE ZXSPECTRUM48
    	DISPLAY "END=", END
    STARTFORSNA	EQU #8000
    	ORG STARTFORSNA
    	DI
    	LD SP,#8000
    	CALL DECRUN
    	LD HL,#2020,DE,#90E0,BC,#10a5:CALL TRIUGOL:JR $
    	
    TRIUGOL	;[ рисовалка треугольников с текстурой
    	; HL=вершина1, DE=вершина2, BC=вершина3
    	LD (AAA),HL,(BBB),DE,(CCC),BC
    	
    SORT	;[ сортировка пузырьковым методом
    	LD B,2
    SORT1   PUSH BC:LD B,2:LD IX,AAA
    SORT2   LD A,(IX+1):CP (IX+3):JP C,SORT3
    	LD H,(IX+3):LD L,(IX+2):LD C,(IX)
    	LD (IX+3),A:LD (IX+2),C:LD (IX+1),H:LD (IX),L
    SORT3   INC IX,IX:DJNZ SORT2
    	POP BC:DJNZ SORT1	;]
    	LD HL,(BBB),DE,(AAA),LY,D
    	LD A,H:CP D:JP Z,TRIU2
    	SUB D:LD C,A:EXA
    	CALL CALK
    	PUSH DE:EXX:POP DE:EXX
    	LD HL,(CCC),DE,(AAA)
    	LD A,H:SUB D:LD C,A
    	CALL CALK
    	PUSH DE:EXX:POP BC:EXX
    	LD HL,(AAA),B,L,C,0:LD (CRD1+1),BC,(CRD2+1),BC
    	CALL TRI3
    	EXA:LD B,A
    	CALL TRI2
    	LD HL,(CCC),DE,(BBB)
    	LD A,H:SUB D:LD C,A:EXA
    	CALL CALK
    	PUSH DE:EXX:POP DE:EXX
    TRIU1	EXA:OR A:RET Z:LD B,A:JP TRI2
    TRIU2	LD HL,(CCC),DE,(AAA)
    	LD A,H:SUB D:RET Z
    	LD C,A:EXA
    	CALL CALK
    	PUSH DE:EXX:POP DE:EXX
    	LD HL,(CCC),DE,(BBB)
    	LD A,H:SUB D:LD C,A
    	CALL CALK
    	PUSH DE:EXX:POP BC:EXX
    	LD HL,(AAA),DE,(BBB)
    	LD B,L,C,0,(CRD1+1),BC
    	LD B,E,(CRD2+1),BC
    	CALL TRI3
    	JP TRIU1
    LINEM	LD A,LY:AND 7:PUSH HL
    L_TEXTU	LD HL,(F_MASK),E,A,D,0:ADD HL,DE
    	LD A,(HL)
    	CPL	; CPL если нужна инверсия, NOP если не нужна
    	POP HL:LD HY,A
    	LD A,B:SUB C:JP NC,LINEM1
    	LD A,B:LD B,C:LD C,A
    LINEM1	LD A,C,D,#F8:AND D:RRA:RRA:RRA:ADD A,L:LD L,A
    	LD A,C:AND D:LD E,A
    	LD A,B:AND D:CP E
    	JP NZ,LINEM3
    	LD A,C:AND 7:ADD A,low MASKA_A:LD E,A
    	LD A,high MASKA_A:ADC A,0:LD D,A
    	LD A,(DE)
    	LD C,A
    	LD A,B:AND 7:ADD A,8:ADD A,low MASKA_A:LD E,A:LD A,D:ADC A,0:LD D,A
    	LD A,(DE):AND C:LD E,A:CPL:AND (HL)
    	LD B,A:LD A,E:AND HY:OR B:LD (HL),A
    	RET
    LINEM3	LD E,C
    	LD A,C:AND D:LD C,A
    	LD A,E:AND 7:ADD A,low MASKA_A:LD E,A	
    	LD A,high MASKA_A:ADC A,0:LD D,A
    	LD A,(DE):LD E,A:CPL:AND (HL):LD (HL),A
    	LD A,E:AND HY:OR (HL):LD (HL),A:INC L
    	LD A,B:AND 7:ADD A,8:ADD A,low MASKA_A:LD E,A
    	LD A,D:ADC A,0:LD D,A
    	LD A,(DE):LD E,A
    	LD A,B:AND #F8:SUB C:SUB 8:JP Z,LINEM4
    	RRA:RRA:RRA:LD B,A:LD A,HY
    LINEM5	LD (HL),A
    	INC L:DJNZ LINEM5
    LINEM4	LD A,E:CPL:AND (HL):LD B,A:LD A,E:AND HY:OR B:LD (HL),A	;**
    	
    	RET
    CALK	LD B,0
    	LD A,L:SUB E:LD E,B:JP NC,CALK1
    	NEG:LD D,A:CALL DIV
    	LD A,E:CPL:LD E,A
    	LD A,D:CPL:LD D,A
    	INC DE
    	RET
    CALK1	LD D,A:JP DIV
    TRI2	PUSH BC:EXX
    CRD1	LD HL,0:ADD HL,DE:LD (CRD1+1),HL
    	LD A,H:LD (TRI2_+1),A
    CRD2	LD HL,0:ADD HL,BC:LD (CRD2+1),HL
    	LD A,H:EXX
    TRI2_	LD C,0:LD B,A:LD L,(IX):LD H,(IX+1)
    	CALL LINEM
    	INC LY:INC IX,IX
    	POP BC:DJNZ TRI2
    	RET
    TRI3	LD L,H:LD H,0:LD BC,TSCRB:ADD HL,HL:ADD HL,BC:PUSH HL:POP IX
    	RET
    ;]
    DIV	;[ DE = DE/BC с округлением ответа
    	PUSH BC
    	LD A,B:CPL:LD B,A
    	LD A,C:CPL:LD C,A
    	INC BC
    	LD HL,0
    	LD A,E
    	ADD A,A
    	RL D
    	DUP 16
    		ADC HL,HL
    		ADD HL,BC
    		JP C,$+5
    		SBC HL,BC
    		RLA
    		RL D
    	EDUP
    	LD E,A
    	POP BC
    	SRL B
    	RR C
    	OR A:SBC HL,BC:RET C
    	INC DE
    	RET
    ;]
    
    DECRUN	;[ делаем табличку адресов в экране
    	LD DE,#4000:LD HL,TSCRB:LD B,#c0
    DECR4   LD (HL),E:INC HL:LD (HL),D:INC HL:CALL DW_DE
    DECR5   DJNZ DECR4
    DW_DE   INC D:LD A,D:AND 7:RET NZ
    	LD A,E:ADD A,32:LD E,A:RET C
    	LD A,D:SUB 8:LD D,A
    	RET
    ;]
    
    ;[
    AAA	DW 0
    BBB	DW 0
    CCC	DW 0
    F_MASK	DW #3C00+8*"D"	; адрес знакоместа чем заливать
    TSCRB	DS 384
    ;]
    MASKA_A	DB #FF,#7F,#3F,#1F,#0F,#07,#03,#01,#80,#C0,#E0,#F0,#F8,#FC,#FE,#FF
    END
    	SAVESNA "basic-poly_text.sna",STARTFORSNA
    	LABELSLIST "user.l"
    [свернуть]

    Формат SJASM, но это не принципиально.
    Один раз вызвать декрюнчер, потом юзать.
    Для примера заливается литерой "D" со включеной инверсией. Можно регулировать.
    Размер вместе с табличкой - #044F (1103 байта)
    Последний раз редактировалось Destr; 08.07.2023 в 13:28.

  2. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мега быстрая загрузка с кассеты???
    от ALEXEY.GORDEEV в разделе Софт
    Ответов: 48
    Последнее: 12.05.2021, 01:48
  2. memcpy|быстрая пересылка данных
    от NovaStorm в разделе Программирование
    Ответов: 9
    Последнее: 02.11.2013, 19:52
  3. Быстрая и медленная память 128к
    от Hacker VBI в разделе Программирование
    Ответов: 21
    Последнее: 27.04.2013, 16:43
  4. Быстрая тригонометрия...
    от ALKO в разделе Программирование
    Ответов: 8
    Последнее: 25.01.2011, 00:29
  5. Уродцы на Бэйсике
    от Jukov в разделе Игры
    Ответов: 24
    Последнее: 11.05.2006, 16:35

Ваши права

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