Стереограммы на спектруме (Часть 2) — Abzac


PeriodicalsAbzac2001 No. 7 → Стереограммы на спектруме (Часть 2)

Стереограммы на спектруме (Часть 2)

(Окончание, начало в № 6.)


Остался невыясненным вопрос: как же зависит расстояние между однородными точками стереограммы от цвета точки на картинке. Прежде всего, скажу, что расстояние может варьировать от 32 до 64 пикселей. Чем меньше расстояние между точками, тем ближе будет объект ими обозначенный и наоборот, чем больше расстояние, тем дальше будет объект. Замечу, что чем больше расстояние между точками, тем проще увидеть объемное изображение. И уж совсем непросто на экране Спектрума увидеть стереограмму, на которой одновременно встречаются расстояния 32 и 64 пикселя. Для разрешения 192х256 наиболее оптимальны расстояния 32-40 пикселей при восьмиплановой картинки или 32-48 при шестнадцати планах. Таким образом, становится очевидным, что стереограммы, которые встречаются в некоторых demo (например, в MQM-5) не были получены на Спектруме, а лишь конвертированы с других платформ. Дело в том, что на Спектруме на одном знакоместе удастся получить только два (по количеству цветов) плана, в то время как в той же MQM-5 их больше. Конвертер должен четко отличать одну точку от другой, для этого и используются цвета. Зная, что для формирования цвета пикселя на Спектруме используется три бита и еще два, отвечающие за BRIGHT и FLASH, получаем 5 бит на цвет, итого 32 цвета или 32 плана. Однако визуально, рисуя картинку, не получится отличить между собой просто черный цвет, яркий черный цвет, яркий мигающий черный цвет и т.д. Может быть кому-нибудь удастся использовать триколорные и мультиколорные картинки или Gigascreen для получения стереограмм - в этом случае будет снято ограничение на два плана на знакоместо. С программной точки зрения сложностей здесь нет, но, на сколько я знаю, для этих режимов не существует полноценных графических редакторов, поэтому подготовить картинки для конвертирования не представляется возможным. А сейчас мне хочется остановиться на способе просмотра подобных картинок. Сразу же оговорюсь, что тот «мусор», который возникает на экране в процессе конверсии и есть трехмерная картинка, ее нужно только увидеть. Увидеть объемную картинку может ЛЮБОЙ человек, независимо от остроты зрения, единственное непременное условие: наличие обоих глаз. Если Вы четко видите точки на экране, то Вы увидите и стереоизображение. Вспомогательные символы помогут Вам настроится на объемную картинку, но они немного портят стереограмму. Ими стоит пользоваться на первых порах, когда настройка на картинку вызывает затруднение. В дальнейшем, когда Вы научитесь быстро настраиваться на трехмерное изображение, от вспомогательных символов стоит отказаться, но это дело вкуса. Итак, посмотрите на два вспомогательных символа вверху стереограммы, а теперь попытайтесь посмотреть сквозь них, за плоскость поверхности экрана. Изображение потеряет резкость, а вспомогательные символы начнут двоиться и вместо двух четких значков Вы увидите четыре расплывчатых, постарайтесь не акцентировать внимание на значках и продолжать смотреть сквозь них. Значки начнут медленно продолжать раздваиваться (здесь нужно терпеливо ждать пока ваши глаза сделают эту работу за Вас) до тех пор, пока два центральных не сольются воедино. Теперь вместо четырех значков Вы увидите три, причем центральный значок Вы должны увидеть четко и резко, зафиксируйте свое внимание на нем, привыкните к этому фокусу зрения. Медленно переведите свой взгляд вниз, Вы должны видеть четко, до каждого пикселя, трехмерное изображение. Вы можете перемещаться взглядом по всей картинке, как если бы она была обычным рисунком. Возможно, в первый раз потребуется слишком много времени, чтобы научится смотреть стереограммы, но поверьте, оно стоит того. В следующий раз настроится на объемное изображение будет гораздо проще. Если по каким-либо причинам, мое объяснение, как смотреть картинки, оказалось непонятным, я приведу способы просмотра все из того же буклета «Новое измерение», только имейте ввиду, что эти способы описаны для конкретной печатной книги.


«Наилучший способ увидеть трехмерное изображение на обложке этой книги! Посмотрите на свое отражение на глянцевой обложке этой книги. Картинка становится расплывчатой (не в фокусе). Именно такого результата и следует добиться. Если двухмерная поверхность картинки не станет расплывчатой, не появится и трехмерное изображение. Сосредоточив внимание на своем отражении, расслабьтесь. Иногда приходится подождать несколько минут, но уверяем вас, вы не зря потратите время. Вы почувствуете, как что-то начинает происходить. Продолжайте смотреть, и вскоре появится изображение. После того как вы увидите трехмерное изображение в первый раз, с каждым разом вам будет все проще и проще добиться этого результата. Далее в книге вы найдете описания других способов увидеть магические изображения в тех случаях, когда поверхность картинки не дает вашего отражения. Способ 2. Смотрите на картинку, но не фиксируйте внимание на конкретной точке. Расслабьтесь и не напрягайте зрение. Через некоторое время вам покажется, будто что-то происходит. Картинка начнет изменяться. По-прежнему не напрягайтесь - ваши глаза все сделают сами. А от вас требуется лишь терпение. Обычно вначале появляется рельефное изображение лишь части рисунка. Продолжайте смотреть, не сосредоточиваясь на какой-то определенной точке, и перед вами возникнет рельефное изображение рисунка целиком. Способ 3. Поднесите картинку к кончику носа. Вы увидите совершенно расплывчатое изображение. Дайте глазам привыкнуть. Затем, не меняя направления взгляда, медленно отодвигайте картинку, пока она не окажется на расстоянии вытянутых рук. Вы должны увидеть изображение. В противном случае проделайте все сначала. Несколько попыток должны увенчаться успехом. Существуют различные приемы рассматривания стереоскопических изображений. Но в любом случае главное - не фиксировать взгляд, оставляя рисунок нечетким. Если вы не увидели изображение с первой попытки, не отчаивайтесь - такое случается часто. Но не будьте слишком настойчивы, ведь вы вынуждаете глаза проделывать непривычные упражнения и рискуете их утомить. Лучше повторить попытку через некоторое время. Способ 4. Это так называемый метод «сквозного видения». При этом способе взгляд фиксируют за виртуальным изображением. Во время этого процесса рисунок начинает утрачивать четкость и происходит автоматическая аккомодация глаза. Как и в предыдущих случаях, не напрягайтесь. Когда вы привыкнете к таким упражнениям, возможно, именно этот способ поможет вам наиболее быстро увидеть скрытое изображение. Все рисунки этой книги задуманы, чтобы видеть их как бы в зеркале. Однако как только вы освоитесь с таким типом стереоскопической визуализации, поупражняйтесь смотреть на них, слегка скосив глаза к носу. Чтобы овладеть такой техникой, вам потребуется некоторое время, но в результате вы получите скрытое изображение в отраженном виде.

На приведенном ниже рисунке наглядно показано, как это происходит:

https://zxpress.ru/images/periodicals/articles/original/91.gif

https://zxpress.ru/images/periodicals/articles/original/91.gif

Тренированные читатели могут проверить этот способ, если они с легкостью видят все картинки этой книги. Получив одно стереоскопическое изображение, вы можете увидеть и другое. Для этого подождите, пока появится стереоскопическое изображение, и отыщите внутри него широкую плоскую поверхность. Поупражняйтесь с помощью одного из вышеописанных способов, добиваясь того, чтобы эта поверхность стала нерезкой. Будьте терпеливы, такой метод требует большой сосредоточенности, и вам может показаться, что вы начинаете с нуля. Но постепенно перед вами появится измененная версия первого изображения. Теперь вы видите только этот второй вариант. На практике некоторым удается получить до трех вариантов. Однако это значительно труднее, почти невозможно с изображениями, на которых не удается обнаружить широкой плоской поверхности. И не старайтесь сразу добиться полного успеха, поскольку это занятие создает большую нагрузку на глазные мышцы.»


В конце статьи я привожу свою программу, которая позволяет конвертировать картинку в 8 планов. Программа не идеальна, ее можно еще долго оптимизировать, но, не смотря на это, она вполне работоспособна и может послужить основой для полноценного конвертера или plug-in’а к графическому редактору.


; ПРОГРАММА ДЛЯ ПРЕОБРАЗОВАНИЯ ВОСЬМИЦВЕТНОЙ КАРТИНКИ, 
; ЗАГРУЖЕННОЙ ПО АДРЕСУ #C000, В СТЕРЕОГРАММУ
; (С) Станислав Юдин
; г. Владивосток, 2001

        ORG     #8000
;Устанавливаем черный бордюр и очищаем экран
        DI
        XOR     A
        OUT     (#FE),A
        LD      HL,#4000
        LD      DE,#4001
        LD      BC,#17FF
        LD      (HL),L
        LDIR
        LD      HL,#5800
        LD      DE,#5801
        LD      BC,#02FF
        LD      (HL),#47
        LDIR

;Заносим исходные адреса конвертируемой картинки и стереограммы
        LD      HL,#C000
        LD      (ADR_SCR),HL
        LD      HL,#4000
        LD      (ADR_3D),HL

;Задаем количество строк на экране
        LD      B,#C0
NEXT_LN PUSH    BC

;Заполняем строку случайными точками
        LD      B,#FF
        XOR     A
LINERND PUSH    BC
        PUSH    HL
        PUSH    AF
RND0    LD      HL,#0000
        LD      A,H
        OR      L
        JR      NZ,RND1
        INC     L
RND1    SLA     L
        RL      H
        BIT     7,H
        JR      Z,RND2
        CCF
RND2    BIT     5,H
        JR      Z,RND3
        CCF
RND3    BIT     4,L
        JR      Z,RND4
        CCF
RND4    JR      NC,RND5
        SET     0,L
RND5    LD      (RND0+1),HL
        POP     AF
        RR      L
        POP     HL
        CALL    POINT
        INC     A
        POP     BC
        DJNZ    LINERND

;Задаем количество пикселей в строке, которое будем обрабатывать
        LD      B,#DF
        XOR     A
NEXT_PT PUSH    BC
        PUSH    AF

;Начинаем проверку цвета точки на картинке
        LD      HL,(ADR_SCR)
        PUSH    AF
        LD      A,H
        AND     #18
        LD      H,A
        RLC     L
        RLC     L
        RLC     L
        LD      A,L
        AND     #07
        OR      H
        LD      E,A
        LD      D,#00
        POP     AF
        PUSH    AF
CHECK1  SUB     #08
        JR      C,CHECK2
        INC     D
        JR      CHECK1
CHECK2  LD      A,E
        AND     #18
        SRL     A
        SRL     A
        SRL     A
        OR      #D8
        LD      H,A
        LD      A,E
        AND     #07
        OR      A
        RRA
        RRA
        RRA
        RRA
        ADD     A,D
        LD      L,A
        POP     AF
        PUSH    HL
        LD      HL,(ADR_SCR)
        CALL    XPIXEL
        POP     HL
        PUSH    AF
        LD      A,(HL)
        JR      C,CHECK3
        RRA
        RRA
        RRA
CHECK3  AND     #07

;Зная цвет точки, вычисляем расстояние до дополнительной точки стереограммы
        LD      HL,TABLE
        LD      D,#00
        LD      E,A
        ADD     HL,DE
        LD      B,(HL)

;В нужном месте зажигаем или гасим
;пиксель
        POP     AF
        LD      HL,(ADR_3D)
        PUSH    BC
        CALL    XPIXEL
        POP     BC
        RR      D
        ADD     A,B
        JR      C,NO_PT
        RL      D
        CALL    POINT
NO_PT   POP     AF
        INC     A
        POP     BC

;Переходим к обработке следующего пикселя
        DEC     B
        JP      NZ,NEXT_PT

;Переходим к следующей линии картинки и стереограммы
        LD      HL,(ADR_SCR)
        LD      DE,#0020
        ADD     HL,DE
        LD      (ADR_SCR),HL
        LD      HL,(ADR_3D)
        ADD     HL,DE
        LD      (ADR_3D),HL
        POP     BC
        DEC     B
        JP      NZ,NEXT_LN

;Ставим вспомогательные символы и возвращаемся
        XOR     A
        LD      (#582C),A
        LD      (#5834),A
        RET

;-----------------------------
;Подпрограмма проверки пикселя
;Входные параметры:
;HL - адрес строки
;A - номер точки в строке
;Выходные параметры:
;CY=1 пиксель зажжен
;CY=0 пиксель потушен

XPIXEL  PUSH    HL
        PUSH    AF
XPIXEL2 SUB     #08
        JR      C,XPIXEL1
        INC     L
        JR      XPIXEL2
XPIXEL1 ADD     A,#08
        LD      B,A
        INC     B
        LD      A,(HL)
XPIXEL3 RLA
        DJNZ    XPIXEL3
        RR      H
        POP     AF
        RL      H
        POP     HL
        RET

;--------------------------------
;Подпрограмма установки и удаления пикселя
;Входные параметры:
;HL - адрес строки экрана
;A - номер точки в строке
;CY=1 - поставить пиксель
;CY=0 - удалить пиксель

POINT   PUSH    HL
        PUSH    AF
POINT1  SUB     #08
        JR      C,POINT2
        INC     L
        JR      POINT1
POINT2  ADD     A,#08
        LD      B,A
        INC     B
        XOR     A
        SCF
POINT3  RRA
        DJNZ    POINT3
        LD      B,A
        POP     AF
        PUSH    AF
        LD      A,B
        JR      NC,POINT4
        OR      (HL)
        JR      POINT5
POINT4  CPL
        AND     (HL)
POINT5  LD      (HL),A
        POP     AF
        POP     HL
        RET

;Переменные, хранящие текущие адреса обрабатываемых строк картинки и стереограммы
ADR_SCR DEFW    #0000
ADR_3D  DEFW    #0000

;Таблица соответствия цвета (порядковый номер) глубине плана (число)
TABLE   DEFB    64,63,62,61,60,59, 58,57

(С) Станислав ЮДИН
г. Владивосток
e-mail: speccy@softhome.net
FIDO: 2:5045/78.4
ZXNet: 500:4232/1